示例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.youkuaiyun.com/weixin_52908342/article/details/136448221