某付费博客没解释没注释,我得自己理解注释一下。
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] input = scanner.nextLine().split(" ");
int[] nums = Arrays.stream(input).mapToInt(Integer::parseInt).toArray();
//计算最小差
int result = findMinDifference(nums, 0, 0, 0);
System.out.println(result);
}
// index:当前遍历到的位置 selected:当前选了多少个 sum:当前总和
//其实是计算某一队,就可以算出另一队,进而算出两队差
private static int findMinDifference(int[] nums, int index, int selected, int sum) {
if (selected == 5) {
int totalSum = Arrays.stream(nums).sum();//所有人的和
return Math.abs(sum - (totalSum - sum));//两队差
}
//越界了,返回一个最大值,必定不可能作为结果
if (index == nums.length) {
return Integer.MAX_VALUE;
}
//选当前的
int includeCurrent = findMinDifference(nums, index + 1, selected + 1, sum + nums[index]);
//不选当前的
int excludeCurrent = findMinDifference(nums, index + 1, selected, sum);
//在当前位置的最小差
return Math.min(includeCurrent, excludeCurrent);
}
}