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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP