C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++での最小サイズのサブアレイの合計


n個の要素の配列と正の整数sがあるとします。連続するサブアレイの最小の長さを見つける必要があります。その合計はs以上です。存在しない場合は、代わりに0を返します。したがって、配列が[2,3,1,2,3,4]のようで、合計が7の場合、出力は2になります。これはサブ配列[4,3]がこの場合の最小の長さです。

これを解決するには、次の手順に従います-

  • ans:=0、n:=配列Aのサイズ、j:=0および合計:=0

  • 0からn–1の範囲のiの場合

    • 合計:=合計+ A [i]

    • 合計– A [i]>=Kおよびj<=1

      • 合計:=合計– A [j]

      • jを1増やします

    • 合計>=kの場合、

      • ans =0またはans>(i – j + 1)の場合、ans:=(i – j + 1)

  • 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

  1. C++でのmを法とする最大サブアレイ合計

    この問題では、サイズnと整数mの配列が与えられます。私たちのタスクは、C++でmを法とする最大のサブ配列の合計を見つけるプログラムを作成することです。 プログラムの説明 −ここでは、サブアレイのすべての要素の合計をmで割った値を求めます。 問題を理解するために例を見てみましょう 入力 −配列={4、9、2} m =6 出力 − 5 説明 −すべてのサブ配列と除算の余り {4}: 4%6 = 4 {9}: 9%6 = 3 {2}: 2%6 = 2 {4, 9}: 13%6 = 1 {9, 2}: 11%6 = 5 {4, 9, 2}: 15%6 = 3 この問題を解決するために、

  2. C++の三角形の最小合計パス

    問題の説明 数字の三角形の構造が与えられた場合、上から下への最小経路合計を見つけます。各ステップで、下の行の隣接する番号に移動できます。 例 入力が-の場合    5   7 3  8 1 2 9 6 4 5 その場合、最小合計は次のように13です- 5 + 3 + 1 + 4 アルゴリズム 動的計画法の暗記手法を使用する 暗記、つまり暗記用の1次元配列を作成します K行ごとに、以下の式を使用します- memorization[i] = min( memorization[i], memorization[i+1]) + A[k][i];