ได้รับอาร์เรย์จำนวนเต็มบวกและลบ หาความต่างสูงสุดระหว่างเซตย่อยบวกและลบ ความต่าง (sum positives) - (sum negatives) จะมากที่สุดเสมอ เพราะลบลบได้บวก แปลงลบเป็นบวกแล้วบวกทั้งหมดจะได้ผลลัพธ์
Input: Arr[] = { -2, 0, -3, 8, 10, 12, -4 }
Output: Maximized difference = 39
Explanation: positives {0,8,10,12} sum=30; negatives {-2,-3,-4} sum=-9; diff=30-(-9)=39
Input: Arr[] = { -5, -15, -3, -2, 10, 20, 15 }
Output: 70
Explanation: positives {10,20,15} sum=45; negatives {-5,-15,-3,-2} sum=-25; diff=45-(-25)=70
แนวทาง
- รับอาร์เรย์ int Arr[]
- ฟังก์ชัน subsetDifference(arr, n) คืนความต่างสูงสุด
- ตัวแปร sum=0
- วนลูป i=0 ถึง n-1
- ถ้า arr[i] < 0 ให้คูณ -1 ทำให้เป็นบวก
- บวกเข้า sum
- คืนค่า 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;
}
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