在这个问题上,我们得到一个数组。我们的任务是创建一个程序,该程序将在数组中找到最大的三元组总和,即找到三个总和最大的元素的集合。
让我们举个例子来了解这个问题,
输入-数组= {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