题目描述
小明来到一个新班级,想根据班级同学的身高和自己的升高差值排一个序,差值的绝对值越小,则未知越靠前。如果差值相同,则身高越低的越排前面。输入两行数据,第一行表示小明的身高,第二行表示班级其它同学身高。
示例:
输入: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);