給定值k的最長子陣列長度

2021-10-24 05:47:34 字數 1537 閱讀 1214

(1)給定乙個陣列,值全是正數,請返回累加和為給定值k的最長子陣列長度。

(2)給定乙個陣列,值可以為正、負和0,請返回累加和為給定值k的最長子陣列長度。

(1)l和r都只能往右滑動,不會回退

初始化: l = r = 0

如果視窗內[l, r]的和小於k, r++, sum += num[r]

如果和等於k,記錄視窗大小並視情況更新返回結果值

如果和大於k,sum -= num[l], l右邊滑

(2)必須以每個值為結尾的情況下累積和為k的最長子陣列長度

利用乙個map其中value為累積和,value為累積和最早出現的位置

eg:3 2 1 3

i = 0: sum = 4:希望找到sum=-2的最早出現的位置,但是map.get(-2)為null, 因此ma.put(4, 0)

i = 1: sum = 7, 希望找到sum= 7 - 6(k)的最早出現的位置,但是map.get(1)為null, 因此ma.put(7, 1)

i = 2:sum =9, 希望找到sum= 9 - 6(k)的最早出現的位置,但是map.get(3)為null, 因此map.put(9, 2)

i = 3: sum = 10, 希望找到sum= 10 - 6(k)的最早出現的位置,但是map.get(4)為0, 因此[1,3]之間的和一定為k,map.put(10, 3)

.....

如果k = 4,按照以上的思路,map.get(0)為空,找不到結果,所有在剛開始就應該map.put(0, -1),防止錯過0開始的所有的值,保證邏輯的完整性

public static int maxlength(int arr, int k)

hashmapmap = new hashmap();

map.put(0, -1);

int len = 0;

int sum = 0;

for(int i = 0; i < arr.length; i++)

if(!map.containskey(sum))

} return len;

}

(3)給定乙個陣列,值可以為正、負和0,請返回累加和小於等於k的最長子陣列長度。

4 3 -2 6 7 -3 -1

arr               0 1 2 3 4 5 6

min_sum     4 1 -2 6 3 -4 -1

min_index    0 2 2 3 6 6 6

min_sum[i]: 以nums[i]為開頭的連續子陣列的和的最小值

min_index:最右邊的索引下標

min_sum[i]

如果min_sum[i+1] <= 0:

=nums[i] + min_sum[i+1];

min_index[i] = min_index[i+1]

否則=nums[i]

min_index[i] = i

接著繼續利用滑動視窗來求解

l = r = 0

325 和等於 k 的最長子陣列長度

題目描述 給定乙個陣列 nums 和乙個目標值 k,找到和等於 k 的最長子陣列長度。如果不存在任意乙個符合要求的子陣列,則返回 0。注意 nums 陣列的總和是一定在 32 位有符號整數範圍之內的。示例 1 輸入 nums 1,1,5,2,3 k 3 輸出 4 解釋 子陣列 1,1,5,2 和等於...

LeetCode 和等於 k 的最長子陣列長度

q 給定乙個陣列 nums 和乙個目標值 k,找到和等於 k 的最長子陣列長度。如果不存在任意乙個符合要求的子陣列,則返回 0。注意 nums 陣列的總和是一定在 32 位有符號整數範圍之內的。示例 1 輸入 nums 1,1,5,2,3 k 3 輸出 4 解釋 子陣列 1,1,5,2 和等於 3,...

最長子陣列長度(清華912)

在實現的過程中,要注意判斷角標不能越界,以及相等的數的判斷方法。program entrance exam description 求乙個陣列a中連續相同數字的和等於s的最長子陣列長度。如a s 3,則所求子陣列長度為 3.要求 演算法的時間複雜度不超過o n 空間複雜度不超過o 1 author ...