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

    以上是 C ++中的最小大小子数组总和 的全部内容, 来源链接: utcz.com/z/354269.html

    回到顶部