NC343. 和大于等于K的最短子数组
描述
示例1
输入:
[2,1,2,3],5
输出:
2
示例2
输入:
[2,3,4,5],16
输出:
-1
C++ 解法, 执行用时: 18ms, 内存消耗: 3272KB, 提交时间: 2022-06-14
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param k int整型 * @return int整型 */ int shortestSubarray(vector<int>& nums, int k) { int left =0; int right =0; int sum = 0; int res =nums.size(); while(right!=nums.size()){ sum+=nums[right++]; while(sum>=k){ sum-=nums[left++]; res = min(right-left+1,res); } } if(left!=0){ return res; }else{ return -1; } } };
C++ 解法, 执行用时: 20ms, 内存消耗: 3268KB, 提交时间: 2022-08-05
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param k int整型 * @return int整型 */ int shortestSubarray(vector<int>& nums, int k) { // write code here int L=0; int R=0; int N=nums.size(); int sum=0; int minLen=INT_MAX; while(R<N) { sum+=nums[R]; while(L<=R&&sum>=k){ minLen=min(minLen,R-L+1); sum-=nums[L]; L++; } R++; } return minLen==INT_MAX?-1:minLen; } };
C++ 解法, 执行用时: 20ms, 内存消耗: 3268KB, 提交时间: 2022-07-09
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param k int整型 * @return int整型 */ int shortestSubarray(vector<int>& nums, int k) { // write code here int length=(int)nums.size(); int res=numeric_limits<int>::max(); int left=0, right=0, sum=nums[0]; while(right<length){ if(sum>=k){ res=res<=right-left+1?res:right-left+1; sum-=nums[left++]; }else if(sum<k){ right++; if(right>=length) break; sum+=nums[right]; } } return res!=INT32_MAX?res:-1; } };
C++ 解法, 执行用时: 21ms, 内存消耗: 3208KB, 提交时间: 2022-06-23
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param k int整型 * @return int整型 */ int shortestSubarray(vector<int>& nums, int k) { // write code here int n = nums.size(); int j = 0; int sumSubarray = 0; int min_len = INT_MAX; for(int i =0;i<nums.size(); ++i){ // 不满足条件 while(j<n && sumSubarray < k){ sumSubarray += nums[j]; ++j; } if(sumSubarray >= k) min_len = min(min_len,j-i); sumSubarray -= nums[i]; } if(min_len == INT_MAX) return -1; return min_len; } };
C++ 解法, 执行用时: 22ms, 内存消耗: 3256KB, 提交时间: 2022-06-08
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param k int整型 * @return int整型 */ int shortestSubarray(vector<int>& nums, int k) { int sum = 0, n = nums.size(), ans = INT_MAX; for (int i = 0, j = 0; i < n; ++i) { sum += nums[i]; if (sum <= 0) { j = i + 1; sum = 0; } while (sum >= k) { sum -= nums[j++]; } if (j >= 1 && sum + nums[j - 1] >= k) ans = min(ans, i - j + 2); } return ans == INT_MAX ? -1 : ans; } };