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

C++で連結を繰り返した後に作成された配列の最大サブ配列合計


このチュートリアルでは、連結を繰り返した後に作成された配列で最大のサブ配列の合計を見つけるプログラムについて説明します。

このために、配列と整数Kが提供されます。私たちのタスクは、指定された配列がK回繰り返されたときに、最大の要素を持つサブ配列を見つけることです。

#include<bits/stdc++.h>
using namespace std;
//returning sum of maximum subarray
int maxSubArraySumRepeated(int a[], int n, int k) {
   int max_so_far = INT_MIN, max_ending_here = 0;
   for (int i = 0; i < n*k; i++) {
      max_ending_here = max_ending_here + a[i%n];
      if (max_so_far < max_ending_here)
      max_so_far = max_ending_here;
      if (max_ending_here < 0) max_ending_here = 0;
   }
   return max_so_far;
}
int main() {
   int a[] = {10, 20, -30, -1};
   int n = sizeof(a)/sizeof(a[0]);
   int k = 3;
   cout << "Maximum contiguous sum is "
   << maxSubArraySumRepeated(a, n, k);
   return 0;
}

出力

Maximum contiguous sum is 30

  1. C++で厳密に増加するサブアレイの最大合計を見つける

    n個の整数の配列があるとします。厳密に増加するサブ配列の最大合計を求めます。したがって、配列が[1、2、3、2、5、1、7]のような場合、合計は8になります。この配列には、厳密に増加する3つのサブ配列があります。これらは{1、2、3}、{2 、5}および{1、7}。最大合計サブ配列は{1、7}です。 この問題を解決するには、最大合計と現在の合計を追跡する必要があります。各要素arr[i]について、これがarr [i – 1]より大きい場合は、これを現在の合計に加算します。それ以外の場合、arr[i]は別のサブアレイの開始点です。したがって、現在の合計を配列として更新します。現在の合計を更新す

  2. C ++で繰り返し減算してすべての要素を同じにした後、最大配列合計を見つけます

    n個の要素の配列があるとします。すべての要素が同じになるように、すべての要素の可能な最大合計を見つけます。許可される操作は、任意の2つの要素を選択し、それらの大きい方を2つの絶対差で置き換えることだけです。要素が[9、12、3、6]のようなものだとします。その場合、出力は12になります。したがって、最初にA[1]をA[1] – A [3] =12 – 6 =6に置き換えます。したがって、要素は[9、6、3、6]になり、次にA[を置き換えます。 3] with A [3] – A [2] =6 – 3 =3。したがって、要素は[9、6、3、3]です。次に、A[0]をA[0] – A [1] =9