양수 및 음수 정수 배열이 제공됩니다. 작업은 배열에 있는 요소의 양수 및 음수 하위 집합 간의 최대 차이를 찾는 것입니다. 양수와 음수의 하위 집합이 있기 때문입니다. 그러면 차이(양수 합계) - (음수 합계)가 항상 최대가 됩니다. 마이너스를 빼면 더하기 때문입니다. 모든 음수를 양수로 변환하고 배열의 모든 요소를 추가하면 원하는 결과가 생성됩니다. 이해를 위한 예를 살펴보겠습니다 -
입력 - 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
를 사용하여 배열의 각 요소를 순회합니다. -
현재 요소가 음수(<0)이면 -1을 곱하여 양수를 만듭니다.( arr[i]=arr[i]*-1 )
-
합계에 각 요소를 추가합니다.
-
합계를 가능한 최대 하위 집합 차이로 반환합니다.
예시
#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