【华为机试】绝对值排序

题目描述

小明来到一个新班级,想根据班级同学的身高和自己的升高差值排一个序,差值的绝对值越小,则未知越靠前。如果差值相同,则身高越低的越排前面。输入两行数据,第一行表示小明的身高,第二行表示班级其它同学身高。
示例:

输入:200【小明身高】
输入:198 199 200 201 202
输出:200 199 201 198 202

题解

解题思路很简单,求绝对值排序即可,有一定代码基础的人都写的出来。

题解一

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);
        String s1 = in.nextLine();
        String s2 = in.nextLine();
        in.close();
        String[] split1 = s1.split(" ");
        String[] split2 = s2.split(" ");
        int self = Integer.parseInt(split1[0]);
        int num = Integer.parseInt(split1[1]);
        Map<Integer, String> map = Arrays.stream(split2)
                .map(Integer::parseInt)
                .collect(Collectors.toMap(item -> Math.abs(item - self), String::valueOf, (v1, v2) -> {
    
    
                    if (Integer.parseInt(v1) > Integer.parseInt(v2)) {
    
    
                        return v2 + " " + v1;
                    } else {
    
    
                        return v1 + " " + v2;
                    }
                }));
        List<Integer> collect1 = map.keySet().stream().sorted().collect(Collectors.toList());
        StringJoiner builder = new StringJoiner(" ");
        for (Integer key : collect1) {
    
    
            builder.add(map.get(key));
        }
        System.out.println(builder);
    }
}

题解二

        Scanner in = new Scanner(System.in);
        String s1 = in.nextLine();
        String s2 = in.nextLine();
        in.close();
        String[] split1 = s1.split(" ");
        String[] split2 = s2.split(" ");
        int self = Integer.parseInt(split1[0]);
        int num = Integer.parseInt(split1[1]);
        String res = Arrays.stream(split2).map(Integer::parseInt).sorted((v1, v2) -> {
    
    
            int abs1 = Math.abs(v1 - self);
            int abs2 = Math.abs(v2 - self);
            if (abs1 != abs2) return abs1 - abs2;
            return v1 - v2;
        }).map(String::valueOf).collect(Collectors.joining(" "));
        System.out.println(res);

猜你喜欢

转载自blog.csdn.net/qq_44503987/article/details/126146637