我們有一個由正數和負數組成的陣列。任務是找出數組中正數子集和負數子集之間的最大差異。由於我們有正數和負數的子集,所以差值(正數的總和)-(負數的總和)將永遠是最大的。這是因為減去負數將會加上它們。將所有負數轉換為正數,並將數組的所有元素相加將產生所需的結果。讓我們來看一些例子以便理解−
輸入 − 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以下程式的方法如下#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
以上是最大化集合中負數的兩個子集之間的差異,在C中實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!