LeetCode 862 和至少為K的最短子陣列

2022-09-20 04:42:10 字數 634 閱讀 6897

leetcode 862 和至少為k的最短子陣列

題目大意:

給你乙個整數陣列\(nums\)和乙個整數\(k\),找出\(nums\)中和至少為\(k\)的最短非空子陣列,並返回該子陣列的長度。如果不存在這樣的子陣列,返回\(-1\)。

子陣列是陣列中連續的一部分。

題解:

由於陣列中可能出現負數,所以尺取法不可行,需要使用單調佇列維護字首和。

使用單調佇列的正確性證明

class solution 

int n = nums.size();

std::vectorsum(n + 1);

for (int i = 1; i <= n; ++i)

int ans = n + 1;

std::dequedeq;

for (int i = 0; i <= n; ++i)

while (!deq.empty() && sum[i] - sum[deq.front()] >= k)

deq.push_back(i);

}return ans == n + 1 ? -1 : ans;

}};

leetcode 862 和至少為K的最短子陣列

題目描述 返回a的最短的非空連續子陣列的長度,該子陣列的和至少為k。如果沒有和至少為k的非空子陣列,返回 1 示例 輸入 a 1 k 1 輸出 1 輸入 a 1,2 k 4 輸出 1 輸入 a 2,1,2 k 3 輸出 31.1 a.length 50000 2.10 5 a i 10 5 3.1 ...

和至少為K的最短子陣列

返回 a 的最短的非空連續子陣列的長度,該子陣列的和至少為 k 如果沒有和至少為 k 的非空子陣列,返回 1 示例 1 輸入 a 1 k 1 輸出 1 示例 2 輸入 a 1,2 k 4 輸出 1 示例 3 輸入 a 2,1,2 k 3 輸出 3 重點就是每次遍歷的時候,加到i的時候,把i之前的負數...

leetcode 和為k的子陣列

class solution public int subarraysum vector nums,int k if nums.size 0 return 0 int res 0 unordered mapmap map 0 1 int sum 0 for int i 0 i從j到i求和等於k,不斷...