leetCode 327 區間和的個數

2021-10-10 23:40:54 字數 2440 閱讀 2225

給定乙個整數陣列nums,返回區間和在[lower, upper]之間的個數,包含lowerupper

區間和s(i, j)表示在nums中,位置從ij的元素之和,包含ij (i ≤ j)

說明:最直觀的演算法複雜度是o(n^2),請在此基礎上優化你的演算法。

示例:

輸入: nums =[-

2,5,

-1], lower =-2

, upper =2,

輸出:3

解釋:3個區間分別是:[0

,0],

[2,2

],[0

,2],它們表示的和分別為:-2

,-1,

2。

由於要求區間和因此可以想到字首和陣列,設字首和陣列為presum

問題可以轉換為presum[j] - presum[i] 屬於[lower, upper]

如果給定兩個公升序排列的陣列n1,n2, 嘗試找出下標對(i, j), 滿足:n2[j] - n1[i] 屬於[lower, upper]

由於兩個陣列是公升序排列的所以只需要在n2中維護兩個指標l, r, 一開始都指向n2的起始位置,首先考慮n1的第乙個元素,l向有移動知道找到乙個元素使n2[l] - n1[0] >= lower為止,這樣l右側的元素均大於n1[0] + lower, 再移動r指標,直到n2[r] - n1[0] > upper這樣r左側的元素均小於等於n1[0] + upper,所以區間[l, r)的所有下標j都滿足n2[j] - n1[i] 屬於[lower, upper]。下面繼續考察n1的第二個元素,由於n1是遞增的所以l, r繼續向右移動。 在上述過程中對於n1的每乙個下標都應記錄相應區間[l, r)的大小,最終就統計得到了下標對(i, j)的數量。

leetcode327 區間和的個數

給定乙個整數陣列 nums,返回區間和在 lower,upper 之間的個數,包含 lower 和 upper。區間和 s i,j 表示在 nums 中,位置從 i 到 j 的元素之和,包含 i 和 j i j 說明 最直觀的演算法複雜度是 o n2 請在此基礎上優化你的演算法。示例 輸入 nums...

leetcode 327 區間和的個數 C語言

演算法思想 使用歸併排序的演算法思想 1.使用sums i 陣列放0 i 1的累加和,sums 0 0 2.對於任意的i j,lower sums i sums j upper滿足條件,則為一種可能的序列區間 3.對於有序的陣列,取符合條件的返回,可使用雙指標的方法。void print long ...

LeetCode 327 區間和的個數 歸併排序

求區間和,一般先構建字首和陣列進行資料預處理,可以 o 1 得到任意區間和。查詢元素,一般先進行排序,利用單調性可以快速的縮減查詢範圍,減少時間複雜度。歸併排序包含了兩個過程 從上往下的分解 把當前區間一分為二,直至分解為若干個長度為1的子陣列 從下往上的合併 兩個有序的子區域兩兩向上合併。對於本題...