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,不斷...