C語言中最大化兩個子集之間的差值
給定一個包含正整數和負整數的陣列。任務是找到陣列中存在的元素的正子集和負子集之間的最大差值。由於我們有正數和負數的子集,因此差值(正數之和) - (負數之和)將始終最大。這是因為減去負數會將它們加起來。將所有負數轉換為正數並新增陣列的所有元素將產生所需的結果。讓我們看一些示例以瞭解 -
輸入 - Arr[] = { -2, 0, -3, 8, 10, 12, -4 }
輸出 - 兩個子集之間最大化的差值 - 39
說明 - 正整數子集 {0, 8,10,12} 和為 30
負整數子集 { -2, -3, -4 } 和為 -9
最大差值將為 30 - (-9) = 39
輸入 - Arr[] = { -5, -15, -3, -2, 10, 20, 15 }
輸出 - 兩個子集之間最大化的差值 - 70
說明 - 正整數子集 { 10, 20, 15 } 和為 45
負整數子集 { -5, -15, -3, -2 } 和為 -25
最大差值將為 45 - (-25) = 70
下面程式中使用的方案如下
我們取一個包含正整數和負整數的整數陣列作為 Arr[]
函式 subsetDifference( int arr[],int n) 用於查詢負整數和正整數的兩個子集之間的最大化差值。它接受兩個引數,一個是陣列本身,另一個是其大小 n。
取一個變數 sum=0 來儲存陣列所有元素的總和。
從左開始,使用 for 迴圈 ( i=0;i<n;i++ ) 遍歷陣列的每個元素
如果當前元素為負數 (<0),則將其乘以 -1 變成正數。( arr[i]=arr[i]*-1 )
將每個元素新增到總和中。
返回 sum 作為可能的最大子集差值。
示例
#include <stdio.h> int subsetDifference(int arr[], int n){ int sum = 0; for (int i = 0; i < n; i++){ if(arr[i]<0) arr[i]=arr[i]*-1; sum += arr[i]; } return sum; } // Driver Code int main(){ int arr[] = { -1, 3, 5, 17, -32, 12 }; int n = 6; printf("Maximized difference between subsets : %d", subsetDifference(arr, n)); return 0; }
輸出
如果我們執行上述程式碼,它將生成以下輸出 -
Maximized difference between two subsets: 70
廣告