C ++中的最小大小子数组总和
假设我们有一个由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