贪心思想:
$|n_1−n_2|$要想达到最小,我们可以思考如下:
- 当总数N是偶数的时候,$n_1 = n_2 = N/2$ 时, $|n_1−n_2|$可以取到最小为$0$。
- 当总数N是奇数的时候,$n_1 = N/2,n_2 = N/2 + 1$ 时, $|n_1−n_2|$可以取到最小为$1$。
$|S_1−S_2|$要想达到最大,我们则可以先将这$N$个数排序,然后让前$N/2$放到$A_1$集合,剩余的放到$A_2$集合即可。
Java代码
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
//对数组进行排序,为后续的处理做准备
Arrays.sort(arr);
int s1 = 0,s2 = 0;
for(int i = 0; i < n/2;i++){
s1 += arr[i];
}
for(int i = n/2; i < n;i++){
s2 += arr[i];
}
System.out.println(n % 2 + " " + (s2 - s1));
}
}