【限時免費】20天拿下華為OD筆試之【前綴和】2023B-尋找連續區間【歐弟算法】全網注釋最詳細分類最全的華為OD真題題解

文章目錄

  • 題目描述與示例
    • 題目描述
    • 輸入描述
    • 輸出描述
    • 示例一
      • 輸入
      • 輸出
      • 說明
    • 示例二
      • 輸入
      • 輸出
  • 解題思路
  • 代碼
    • Python
    • Java
    • C++
    • 時空復雜度
  • 華為OD算法/大廠面試高頻題算法練習沖刺訓練

題目描述與示例

題目描述

給定一個含有N個正整數的數組,求出有多少個連續區間(包括單個正整數),它們的和大于等于x

輸入描述

第一行兩個整數N x (0 < N <= 100000 ,0 <= x <= 10000000)

第二行有N個正整數(每個正整數小于等于100)。

輸出描述

輸出一個整數,表示所求的個數。

示例一

輸入

3 7
3 4 7

輸出

4

說明

3+4
4+7
3+4+7
7

這四組數據都是大于等于7的,所以答案為4

示例二

輸入

10 10000000
1 2 3 4 5 6 7 8 9 10

輸出

0

解題思路

題目要求求連續區間的和,很容易想到使用前綴和的思路來解決。先求出前綴和數組,如對示例一求出[3, 4, 7]的前綴和數組為pre_sum_list = [0, 3, 7, 14]

由于原數組中每一個元素均為非負整數,故前綴和數組一定是一個非遞減數組。

對于pre_sum_list中的每一個元素pre_sum_list[i],我們要找到索引ji < j)。

  • j是滿足pre_sum_list[j] - pre_sum_list[i] >= target的第一個索引。
  • 此時任意比j大的索引k,都能使得pre_sum_list[k] - pre_sum_list[i] >= target成立,即區間[i,k]是一個符合要求的區間。
  • 由于前綴和數組是一個非遞減數組,j的尋找可以很容易地使用二分查找來完成。
  • 假設j已經求出,那么對于i而言,一共存在n+1-j個這樣的區間,滿足連續區間和大于等于target。將所有i對應的n+1-j計算并求和,即可以得到答案。

代碼

Python

# 題目:【前綴和】2023B-尋找連續區間
# 分值:100
# 作者:閉著眼睛學數理化
# 算法:前綴和/二分查找
# 代碼有看不懂的地方請直接在群上提問from itertools import accumulaten, target = map(int, input().split())
nums = list(map(int, input().split()))
# 構建前綴和數組
pre_sum_list = [0] + list(accumulate(nums))
# 初始化答案
ans = 0# 只需要遍歷前n個前綴和即可,最后一個前綴和無需考慮
for i in range(n):# 二分查找的目標值bi_target = pre_sum_list[i] + target# 優化:如果發現二分目標值已經超過了數組中所有元素總和# 則必然無法找到以i為起始位置的連續區間,其和大于target# 故直接退出循環即可if bi_target > pre_sum_list[-1]:break# 左閉右開區間# 注意前綴和數組的長度為n+1,故此處right初始化為n+2left, right = i, n+2while left < right:mid = left + (right - left) // 2# 找到第一個大于等于bi_target的數的索引if pre_sum_list[mid] >= bi_target:right = midelse:left = mid + 1# 退出while循環時,j = left = right# 是使得pre_sum_list[j] >= bi_target的第一個索引# 一共有n+1-j個區間,其區間和大于targetans += (n+1-left)print(ans)

Java

import java.util.Scanner;
import java.util.Arrays;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int target = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}int[] preSum = new int[n + 1];preSum[0] = 0;for (int i = 0; i < n; i++) {preSum[i + 1] = preSum[i] + nums[i];}int ans = 0;for (int i = 0; i < n; i++) {int biTarget = preSum[i] + target;if (biTarget > preSum[n]) {break;}int left = i;int right = n + 2;while (left < right) {int mid = left + (right - left) / 2;if (preSum[mid] >= biTarget) {right = mid;} else {left = mid + 1;}}ans += (n + 1 - left);}System.out.println(ans);}
}

C++

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {int n, target;cin >> n >> target;vector<int> nums(n);for (int i = 0; i < n; i++) {cin >> nums[i];}vector<int> preSum(n + 1, 0);for (int i = 0; i < n; i++) {preSum[i + 1] = preSum[i] + nums[i];}int ans = 0;for (int i = 0; i < n; i++) {int biTarget = preSum[i] + target;if (biTarget > preSum[n]) {break;}int left = i;int right = n + 2;while (left < right) {int mid = left + (right - left) / 2;if (preSum[mid] >= biTarget) {right = mid;} else {left = mid + 1;}}ans += (n + 1 - left);}cout << ans << endl;return 0;
}

時空復雜度

時間復雜度:O(NlogN)。構建前綴和的時間復雜度為O(N)。對于前綴和數組中的每一個元素pre_sum_list[i],都要進行二分查找,單次二分查找的時間復雜度為O(logN),一共需要進行N次二分查找。

空間復雜度:O(N)。前綴和數組所占空間。


華為OD算法/大廠面試高頻題算法練習沖刺訓練

  • 華為OD算法/大廠面試高頻題算法沖刺訓練目前開始常態化報名!目前已服務100+同學成功上岸!

  • 課程講師為全網50w+粉絲編程博主@吳師兄學算法 以及小紅書頭部編程博主@閉著眼睛學數理化

  • 每期人數維持在20人內,保證能夠最大限度地滿足到每一個同學的需求,達到和1v1同樣的學習效果!

  • 60+天陪伴式學習,40+直播課時,300+動畫圖解視頻,300+LeetCode經典題,200+華為OD真題/大廠真題,還有簡歷修改、模擬面試、專屬HR對接將為你解鎖

  • 可上全網獨家的歐弟OJ系統練習華子OD、大廠真題

  • 可查看鏈接 大廠真題匯總 & OD真題匯總(持續更新)

  • 綠色聊天軟件戳 od1336了解更多

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165079.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165079.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165079.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【網絡奇緣】- 計算機網絡|分層結構|ISO模型

&#x1f308;個人主頁: Aileen_0v0&#x1f525;系列專欄: 一見傾心,再見傾城 --- 計算機網絡~&#x1f4ab;個人格言:"沒有羅馬,那就自己創造羅馬~" 目錄 計算機網絡分層結構 OSI參考模型 OSI模型起源 失敗原因: OSI模型組成 協議的作用 &#x1f4dd;全文…

二十四、RestClient操作文檔

目錄 一、新增文檔 1、編寫測試代碼 二、查詢文檔 1、編寫測試代碼 三、刪除文檔 1、編寫測試代碼 四、修改文檔 1、編寫測試代碼 五、批量導入文檔 批量查詢 一、新增文檔 1、編寫測試代碼 SpringBootTest public class HotelDocumentTest {private RestHighLevelC…

【棧】不同字符的最小子序列

題目&#xff1a; /*** 思路&#xff1a;棧,使用數組記錄每個字母出現的次數&#xff0c;再用一個數組標記字符是否在棧中* 遍歷棧&#xff0c;存儲字符時比較棧頂字符&#xff0c;若小于棧頂字符并且后面有重復的字符則* 棧頂元素出棧&#xff0c;否則入棧。** au…

PS 注釋工具 基礎使用方法講解

好 上文PS 顏色取樣器&標尺工具 基本使用講解中 我們講了 顏色取樣器和標尺工具的基本用法 下面我們來看一下 注釋工具 這個 主要是后面 比較大的作品 可能不是我們一個人取設計 團隊作圖 就需要用到它 選擇 注釋工具 后 我們隨便點擊圖像任何一個位置 右側就會出現一個輸…

gitlab各版本安裝注意點:

研發團隊在安裝gitlab各版本過程中可能遇到各種問題&#xff0c;為了后續容易查看特將我們在實踐過程中遇到的各類問題要點總結如下&#xff1a; gitlab 10.8.3 (564c342&#xff09;安裝 centos Linux yum安裝網址查找網址&#xff1a;gitlab/gitlab-ce - Results for gitla…

執行shell腳本提示syntax error: unexpected end of file

具體報錯如下&#xff1a; ./test.sh: line 36: syntax error: unexpected end of file執行命令時需將test.sh替換為實際的腳本文件名稱。 情形一&#xff1a; shell腳本在Windows下編寫&#xff0c;上傳到Linux上執行&#xff0c;由于 fileformat 類型不同&#xff0c;所以報…

黑馬點評12-實現好友關注/取關功能,查看好友共同關注列表

好友關注 數據模型 數據庫中的tb_follow記錄博主與粉絲的關系 tb_follow表對應的實體類 Data EqualsAndHashCode(callSuper false) Accessors(chain true) TableName("tb_follow") public class Follow implements Serializable {private static final long ser…

代碼隨想錄算法訓練營第三十二天| 122 買賣股票的最佳時機 || 55 跳躍游戲 45 跳躍游戲 ||

目錄 122 買賣股票的最佳時機 || 55 跳躍游戲 45 跳躍游戲 || 122 買賣股票的最佳時機 || 設置變量now代表此時買入的股票&#xff0c;為賦值為Integer.MAX_VALUE&#xff0c;遍歷prices數組&#xff0c;有如下兩種情況&#xff1a; 如果比now小說明不能售出&#xff0c;可以…

關于unicloud云對象或云函數獲取時間不對的問題

話不多說&#xff0c;直接上代碼&#xff1a; function timeWeekFormat() { //定義一個日期對象; var dateTime getOffsetDate(8); //獲得系統年份; var year dateTime.getFullYear(); //獲得系統月份; var month dateTime.getMonth() 1; //獲…

棧和隊列的OJ題--12.括號匹配

12.括號匹配 20. 有效的括號 - 力扣&#xff08;LeetCode&#xff09; 解題思路&#xff1a;該題比較簡單&#xff0c;是對棧特性很好的應用&#xff0c;具體操作如下&#xff1a;循環遍歷String中的字符&#xff0c;逐個取到每個括號&#xff0c;如果該括號是&#xff1a;1. …

Git工作流和Commit規范

Git大家都非常熟悉了&#xff0c;就不做過多介紹&#xff0c;但是如何用好Git、如何進行合理的分支開發、Merge你是否有一個規范流程呢&#xff1f;&#x1f4a4; 不論是一個團隊一起開發一個項目&#xff0c;還是自己獨立開發一個項目&#xff0c;都少不了要和Git打交道&…

【NGINX--5】身份驗證

1、HTTP 基本身份驗證 需要通過 HTTP 基本身份驗證保護應用或內容。 生成以下格式的文件&#xff0c;其中的密碼使用某個受支持的格式進行了加密或哈希處理&#xff1a; # comment name1:password1 name2:password2:comment name3:password3第一個字段是用戶名&#xff0…

紫光展銳V8821榮獲“中國芯”重大創新突破產品獎

近日&#xff0c;“中國芯”優秀產品評選落下帷幕&#xff0c;紫光展銳首顆5G IoT-NTN衛星通信SoC芯片V8821憑借在衛星通信前沿領域的技術創新&#xff0c;從285家芯片企業、398款芯片產品中脫穎而出&#xff0c;榮獲第十八屆“中國芯”年度重大創新突破產品獎。 “中國芯”優…

ReentrantLock源碼解析

ReentrantLock源碼解析 文章目錄 ReentrantLock源碼解析一、ReentrantLock二、ReentrantLock 的 Sync、FairSync、NonfairSync2.1 Sync、FairSync、NonfairSync2.2 NonfairSync 下的 tryAcquire2.3 FairSync下的 tryAcquire2.4 tryRelease 三、lock.lock()3.1 NonfairSync.lock…

優橙內推青海專場——5G網絡優化(中高級)工程師

可加入就業QQ群&#xff1a;801549240 聯系老師內推簡歷投遞郵箱&#xff1a;hrictyc.com 內推公司1&#xff1a;浙江明訊網絡技術有限公司 內推公司2&#xff1a;南京華蘇科技有限公司 內推公司3&#xff1a;杭州華星創業通信技術有限公司 浙江明訊網絡技術有限公司 浙江明…

4.常見面試題--操作系統

特點&#xff1a;并發性、共享性、虛擬性、異步性。 Windows 和 Linux 內核差異 對于內核的架構?般有這三種類型&#xff1a; ● 宏內核&#xff0c;包含多個模塊&#xff0c;整個內核像?個完整的程序&#xff1b; ● 微內核&#xff0c;有?個最?版本的內核&#xff0…

名字大卻不中用的AI大模型,名不副實

這兩天 OpenAI 團隊&#xff08; ChatGPT 公司&#xff09;的戲比較多&#xff0c;兩三天的功夫&#xff0c;劇情發展都超出了 OpenAI 首席科學家的預期&#xff0c;目前來看&#xff0c;微軟還是最大的贏家。這是個引子&#xff0c;這個話題&#xff0c;網絡上早已傳爛了&…

云安全之盾:ZStack 云主機安全防護解決方案全方位保護云環境

隨著云計算的蓬勃發展&#xff0c;網絡威脅愈發復雜&#xff0c;涵蓋了從勒索病毒到APT攻擊的各種威脅類型。在這一風云變幻的網絡安全環境下&#xff0c;云主機安全不再僅僅是一個選項&#xff0c;它是信息系統安全的核心要素。云軸科技ZStack 云主機安全防護解決方案是為了滿…

6.3.WebRTC中的SDP類的結構

在上節課中呢&#xff0c;我向你介紹了sdp協議&#xff0c; 那這節課呢&#xff0c;我們再來看看web rtc中。是如何存儲sdp的&#xff1f;也就是sdp的類結構&#xff0c;那在此之前呢&#xff1f;我們先對sdp的內容啊&#xff0c;做一下分類。因為在上節課中呢&#xff0c;雖然…

Python+jieba+wordcloud實現文本分詞、詞頻統計、條形圖繪制及不同主題的詞云圖繪制

目錄 序言&#xff1a;第三方庫及所需材料函數模塊介紹分詞詞頻統計條形圖繪制詞云繪制主函數 效果預覽全部代碼 序言&#xff1a;第三方庫及所需材料 編程語言&#xff1a;Python3.9。 編程環境&#xff1a;Anaconda3&#xff0c;Spyder5。 使用到的主要第三方庫&#xff1a;…