C语言中两个m元素子集的最大差值
任务是找到数组中m个元素之和的最大差值。假设我们有一个数组和一个数字m,那么我们将首先找到m个最大数字之和,然后从中减去m个最小数字之和,以获得最大差值。因此,主要任务是找到两个m个数字的子集,它们具有最大和和最小和。
让我们现在用一个例子来理解我们必须做什么:
输入
arr = {1,2,3,4,5} ; m=3输出
Maximum difference here is : 6
解释:这里最大的3个数字是3,4,5,它们的和是12。最小的3个数字是1,2,3,它们的和是6。因此,最大差值是12-6,即6。
输入
arr = {10,13,22,8,16,14}; m=4输出
Maximum difference here is : 20
解释:这里最大的4个数字是22,16,14,13,它们的和是65。最小的4个数字是8,10,13,14,它们的和是45。因此,最大差值是65-45,即20。
下面程序中使用的算法如下:
获取输入数组arr[]和一个用于创建集合的数字m。
在find_diff()函数中,我们传递输入数组及其长度,并返回m个元素集合之和的最大差值。
在这里,我们将首先对数组arr[]的元素进行排序。
然后我们将找到前m个和后m个元素的和,因为这些将是arr[]中最小的m个和最大的m个数。
最后我们返回差值。
注意:假设sort(arr[],int)返回已排序的数组。
示例
#include<stdio.h>
//create function to calculate maximum difference between sum of highest and lowest m elements of array
int find_diff(int arr[],int length,int m){
//for sorting the array
sort(arr,length);
int maxsum=0, minsum=0;
//calculate now max difference between two subsets of m elements
for(int i=0;i<m;i++){
minsum+=arr[i];
maxsum+=arr[length-i-1];
}
return(maxsum-minsum);
}
// Driver program
int main(){
int arr[]={1,1,2,3,5,7,1};
int m=3;
cout << find_diff(arr,7,m);
return 0;
}输出
如果我们运行上面的代码,我们将得到以下输出:
12
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C编程
C++
C#
MongoDB
MySQL
Javascript
PHP