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