C++陣列中最大三元組和


在這個問題中,我們得到一個數組。我們的任務是建立一個程式,找到陣列中的最大三元組和,即找到三個元素的集合,其和最大。

讓我們舉個例子來理解這個問題:

輸入 − array = {4, 6, 1, 2}

輸出 − 12

解釋

all triplets are :
(4, 6, 1) = 4+6+1 = 11
(4, 6, 2) = 4+6+1 = 12
(4, 1, 2) = 4+6+1 = 7
(6, 1, 2) = 4+6+1 = 9
The maximum triplet sum is 12

解決這個問題的一個簡單方法是我們上面例子中描述的,即對所有三元組對求和,然後找到其中的最大值。但是這種方法效率不高,因為隨著陣列長度的增加,三元組的數量會變得很大。

在這個方法中,我們將執行三個迴圈,找到所有可能的三元組和,如果這個三元組和大於maxsum,我們將把這個三元組和初始化為maxsum。

示例

程式來說明我們的解決方案:

 線上演示

#include <iostream>
using namespace std;
int maxSum(int arr[], int n){
   int maxSum = 0;
   int i, j, k;
   for (i = 0; i < n; i++)
      for (j = i + 1; j < n; j++)
         for (k = j + 1; k < n; k++)
            if (maxSum < arr[i] + arr[j] + arr[k]) maxSum = arr[i] + arr[j] + arr[k];
   return maxSum;
}
int main(){
   int arr[] = { 3, 5, 7 ,1, 9, 0 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum triplet sum of the array is "<<maxSum(arr, n);
   return 0;
}

輸出

The maximum triplet sum of the array is 21

一個有效的方法是排序陣列,然後找到陣列最後三個元素的和,這將是三元組的最大和。

示例

程式來說明解決方案:

 線上演示

#include <bits/stdc++.h>
using namespace std;
int maxSum(int arr[], int n) {
   sort(arr, arr + n);
   return arr[n - 1] + arr[n - 2] + arr[n - 3];
}
int main() {
   int arr[] = { 3, 5, 9, 1, 2, 8, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum triplet sum of the array is "<<maxSum(arr, n);
   return 0;
}

輸出

The maximum triplet sum of the array is 24

更新於:2020年6月3日

瀏覽量:178

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.