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

C++で少なくともk個の数値を持つ最大の合計サブ配列


プログラムを完了するための手順を見てみましょう。

  • アレイを初期化します。
  • サイズnのmax_sum配列を初期化します。
  • すべてのインデックスの最大合計を見つけて、max_sum配列に格納します。
  • すべての要素の合計を計算し、それを可変合計に格納します。
  • i=kからnまで繰り返すループを作成します。
    • 合計にa[i]--a[i--k]を追加します。
    • 結果の最大値、合計で結果を更新します。
    • 結果の最大値、合計+max_sum[i-k]で結果を更新します。

コードを見てみましょう。

#include<bits/stdc++.h>
using namespace std;
int getMaxSum(int a[], int n, int k) {
   int maxSum[n];
   maxSum[0] = a[0];
   int currentMax = a[0];
   for (int i = 1; i < n; i++) {
      currentMax = max(a[i], currentMax+a[i]);
      maxSum[i] = currentMax;
   }
   int sum = 0;
   for (int i = 0; i < k; i++) {
      sum += a[i];
   }
   int result = sum;
   for (int i = k; i < n; i++) {
      sum += a[i] - a[i-k];
      result = max(result, sum);
      result = max(result, sum + maxSum[i-k]);
   }
   return result;
}
int main() {
   int a[] = {5, 3, 7, -5, 6, 2, 1};
   int k = 6;
   cout << getMaxSum(a, 7, k) << endl;
   return 0;
}

出力

上記のコードを実行すると、次の結果が得られます。

19

結論

チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。


  1. C++で合計Sを持つ素数Pの後の素数

    この問題では、合計S、素数P、およびNの3つの数が与えられます。私たちのタスクは、合計がSに等しいPより大きいN個の素数をすべて見つけることです。 私たちの問題を理解するために例を見てみましょう Input: N = 2, P = 5, S = 18 Output: 7 11 Explanation: Prime numbers greater than 5 : 7 11 13 Sum = 7 + 11 = 18 この問題を解決するには、PとSの間のすべての素数を見つける必要があります。次に、合計がSになるN個の素数を見つけます。このためにバックトラッキングを使用します。 ソリューション

  2. 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 この問題を解決するために、