阅读量:3
示例1
input 3 1 1 1 output 0
示例2
input 3 3 7 10 output 1
示例3
input 4 3 7 10 16 output 3
题解1:List
{ public static void main(String[] args) { Scanner in = new Scanner(System.in); int num = in.nextInt(); List<Integer> list = new ArrayList<>(num); for (int i = 0; i < num; i++) { list.add(in.nextInt()); } while (list.size() >= 3) { list.sort((o1, o2) -> o2.compareTo(o1)); int x = list.remove(0); int y = list.remove(0); int z = list.remove(0); int remain = 0; if (x == y && y != z) { remain = y - z; } if (x != y && y == z) { remain = x - y; } if (x != y && y != z) { remain = Math.abs((x - y) - (y - z)); } if (remain > 0) { list.add(remain); } } int res; if (list.size() == 2) { res = Math.max(list.get(0), list.get(1)); } else if (list.size() == 1) { res = list.get(0); } else { res = 0; } System.out.println(res); } }
题解2:优先队列
public static void main(String[] args) { Scanner in = new Scanner(System.in); int num = in.nextInt(); PriorityQueue<Integer> queue = new PriorityQueue<>((o1, o2) -> o2.compareTo(o1)); for (int i = 0; i < num; i++) { queue.offer(in.nextInt()); } while (queue.size() >= 3) { int x = queue.poll(); int y = queue.poll(); int z = queue.poll(); int remain = 0; if (x == y && y != z) { remain = y - z; } if (x != y && y == z) { remain = x - y; } if (x != y && y != z) { remain = Math.abs((x - y) - (y - z)); } if (remain > 0) { queue.offer(remain); } } int res; if (queue.size() == 2 || queue.size() == 1) { res = queue.poll(); } else { res = 0; } System.out.println(res); }
参考
import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int count = in.nextInt(); int[] nums = new int[count]; for (int i = 0; i < count; ++i) { nums[i] = in.nextInt(); } if (count == 0){ System.out.println(0); }else if (count == 1){ System.out.println(nums[0]); }else if (count == 2){ System.out.println(Math.max(nums[0], nums[1])); } else { System.out.println(get_result(nums)); } return; } public static int get_result(int[] nums){ ArrayList<Integer> new_nums = new ArrayList<>(); for (int i = 0; i < nums.length; ++i) { new_nums.add(nums[i]); } while(new_nums.size() >= 2){ Collections.sort(new_nums, Collections.reverseOrder()); ArrayList<Integer> nums2 = new ArrayList<>(); int[] nums3 = new int[3]; for (int i=0;i<3;i++){ nums3[i] = nums[i]; } if (nums3[0] == nums3[1] && nums3[1] != nums3[2]){ nums2.add(Math.abs(nums3[2] - nums3[0])); } else if (nums3[0] != nums3[1] && nums3[1] == nums3[2]){ nums2.add(Math.abs(nums3[1] - nums3[0])); } else if (nums3[0] != nums3[1] && nums3[1] != nums3[2]){ nums2.add(Math.abs(Math.abs(nums3[2] - nums3[1]) - Math.abs(nums3[1] - nums3[0]))); } ArrayList<Integer> temp = new ArrayList<>(); for (int i=0;i<nums2.size();i++){ temp.add(nums2.get(i)); } for (int i=3;i<new_nums.size();i++){ temp.add(new_nums.get(i)); } new_nums = temp; } if (new_nums.size() == 0){ return 0; } else if (new_nums.size() == 2){ return Math.max(new_nums.get(0) , new_nums.get(1)); } else { return new_nums.get(0); } } }
https://blog.csdn.net/weixin_52908342/article/details/136448221