OJ-0718

示例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

相关推荐

  1. OJ-0718

    2024-07-19 16:36:04       21 阅读
  2. OJ-0710

    2024-07-19 16:36:04       16 阅读
  3. 071107120713 进程,进程之间的通信

    2024-07-19 16:36:04       16 阅读
  4. Linux<span style='color:red;'>0715</span>

    Linux0715

    2024-07-19 16:36:04      21 阅读
  5. <span style='color:red;'>018</span> Linux

    018 Linux

    2024-07-19 16:36:04      44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 16:36:04       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 16:36:04       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 16:36:04       57 阅读
  4. Python语言-面向对象

    2024-07-19 16:36:04       68 阅读

热门阅读

  1. 【Python中的垃圾回收机制是什么】

    2024-07-19 16:36:04       22 阅读
  2. 基于深度学习的人脸表情识别系统

    2024-07-19 16:36:04       22 阅读
  3. Rancher

    Rancher

    2024-07-19 16:36:04      20 阅读
  4. 5、在共享内存无指针编程:句柄HANDLE转换为指针

    2024-07-19 16:36:04       21 阅读
  5. 探索单片机的光耦:定义、作用与应用

    2024-07-19 16:36:04       23 阅读
  6. C 语言实例 - 使用引用循环替换数值

    2024-07-19 16:36:04       21 阅读
  7. 数据结构---数组

    2024-07-19 16:36:04       17 阅读
  8. 【windows】网络信息相关命令

    2024-07-19 16:36:04       18 阅读
  9. python3.11SSL: SSLV3_ALERT_HANDSHAKE_FAILURE

    2024-07-19 16:36:04       20 阅读
  10. 最短路径算法——A*算法

    2024-07-19 16:36:04       20 阅读
  11. Vue进阶之Vue无代码可视化项目(七)

    2024-07-19 16:36:04       19 阅读