假设我们有一个由n个元素组成的数组和一个正整数s。我们必须找到一个连续子数组的最小长度,其总和大于或等于s。如果没有,则返回0。因此,如果数组类似于[2,3,1,2,3,4],并且sum为7,则输出将为2。这是子数组[4,3]的最小长度。
为了解决这个问题,我们将遵循以下步骤-
ans:= 0,n:=数组A的大小,j:= 0和sum:= 0
对于i,范围为0至n – 1
如果ans = 0或ans>(i – j + 1),则ans:=(i – j + 1)
总和:=总和– A [j]
将j增加1
总和:=总和+ A [i]
而总和– A [i]> = K且j <= 1
如果总和> = k,则
返回ans
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int minSubArrayLen(int K, vector<int>& A) { int ans = 0; int n = A.size(); int j = 0; int sum = 0; for(int i = 0; i < n; i++){ sum += A[i]; while(sum - A[j] >= K && j <= i){ sum -= A[j]; j++; } if(sum >= K){ if(ans == 0 || ans > (i - j + 1)) ans = (i - j + 1); } } return ans; } }; main(){ vector<int> v = {2,3,1,2,4,3}; Solution ob; cout << ((ob.minSubArrayLen(7,v))); }
7 [2,3,1,2,4,3]
输出结果
2