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