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

C++でi

コンセプト

サイズnの正の整数の特定の配列に関して、トリプレット(a i )の最大合計を決定するタスク + a j + a k )0 <=i iのように j k 。

入力

a[] = 3 6 4 2 5 10

出力

19

説明

All possible triplets are:-
3 4 5 => sum = 12
3 6 10 => sum = 19
3 4 10 => sum = 17
4 5 10 => sum = 19
2 5 10 => sum = 17
Maximum sum = 19

メソッド

さて、シンプルなアプローチ 3つのネストされた「forループ」を持つすべてのトリプレットにアクセスし、すべてのトリプレットの合計を1つずつ更新することを決定します。ここで、このメソッドの時間計算量はO(n ^ 3)であり、「n」の値を高くするには不十分です。

繰り返しになりますが、より良いアプローチを適用できます 上記のアプローチでさらに最適化を行うため。この方法では、3つのネストされたループを持つすべてのトリプレットを訪問する代わりに、2つのネストされたループを訪問できます。

各番号を訪問するとき(中間要素(a j ))、最大数を決定します(a i j未満 その前にあり、最大数(ak)がa j より大きい それを超えて。最後に、a iの計算された合計で最大回答を更新します + a j + a k

// C++ program to find maximum triplet sum
#include <bits/stdc++.h>
using namespace std;
// Shows function to calculate maximum triplet sum
int maxTripletSum(int arr1[], int n1){
   // Used to initialize the answer
   int ans1 = 0;
   for (int i = 1; i < n1 - 1; ++i) {
      int max1 = 0, max2 = 0;
      // Determine maximum value(less than arr1[i])
      // from i+1 to n1-1
      for (int j = 0; j < i; ++j)
         if (arr1[j] < arr1[i])
            max1 = max(max1, arr1[j]);
      // Determine maximum value(greater than arr1[i])
      // from i+1 to n1-1
      for (int j = i + 1; j < n1; ++j)
         if (arr1[j] > arr1[i])
            max2 = max(max2, arr1[j]);
      // store maximum answer
      if(max1 && max2)
         ans1=max(ans1,max1+arr1[i]+max2);
   }
   return ans1;
}
// Driver code
int main(){
   int Arr[] = { 3, 6, 4, 2, 5, 10 };
   int N = sizeof(Arr) / sizeof(Arr[0]);
   cout << maxTripletSum(Arr, N);
   return 0;
}

出力

19

  1. C++でm以下の長さの最大合計配列を検索します

    この問題では、長さの異なるn個の配列が与えられます。私たちのタスクは、m以下の長さの最大合計配列を見つけることです。 合計を最大化し、結合されたすべてのサブ配列の長さをmに等しくするには、配列からサブ配列を見つける必要があります。 問題を理解するために例を見てみましょう 入力 n = 3, m = 4 arrOfArr[][] = {    {5, 2, -1, 4, -3}    {3, -2, 1, 6}    {-2, 0, 5} } 出力 20 説明 SubArrays are {5, 4}, {6}, {5}, len

  2. C++のバイナリツリーで最大レベルの合計を見つける

    この問題では、正と負の値を持つ二分木が与えられます。私たちのタスクは、バイナリツリーで最大レベルの合計を見つけることです。 問題の説明: 二分木があります。二分木のすべてのレベルの合計を見つけて、それらの最大値を返します。 問題を理解するために例を見てみましょう 入力: 出力: 5 説明: レベル1:3の要素の合計 レベル2の要素の合計:-3 + 4 =1 レベル3の要素の合計:5 --1 + 6-5 =5 ソリューションアプローチ この問題を解決するには、レベル順トラバーサルを使用してツリーをトラバースする必要があります。そして、レベルごとに、合計