华为OD机试 2024E卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素,相对位置保持不变。
当数组元素为负值时,十进制最低位等同于去除符号位后对应十进制值最低位。
二、输入描述
给定一个非空数组,其元素数据类型为32位有符号整数,数组长度[1,1000]
三、输出描述
输出排序后的数组
1、输入
1,2,5,-21,22,11,55,-101,42,8,7,32
2、输出
1,-21,11,-101,2,22,42,32,5,55,7,8
3、说明
四、解题思路
解题思路
- 解析输入:将输入的字符串转换为整数数组。
- 自定义排序规则:按照数组元素十进制最低位从小到大进行排序。如果最低位相同,则保持元素的相对位置不变(稳定排序)。
- 输出结果:将排序后的数组转换回字符串并输出。
具体步骤
- 读取输入:将输入字符串按逗号分割,并转换为整数数组。
- 排序:使用稳定排序算法(例如Java中的 Arrays.sort),自定义比较器按照元素的十进制最低位排序。
- 输出:将排序后的数组转换为字符串并输出。
五、Java算法源码
public class Test01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取输入并将其转换为整数数组
String input = scanner.nextLine();
String[] inputArray = input.split(",");
Integer[] numbers = new Integer[inputArray.length];
for (int i = 0; i < inputArray.length; i++) {
numbers[i] = Integer.parseInt(inputArray[i].trim());
}
// 关闭Scanner
scanner.close();
// 按照十进制最低位排序,使用自定义比较器
Arrays.sort(numbers, new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
// 计算十进制最低位
int lastDigitA = Math.abs(a) % 10;
int lastDigitB = Math.abs(b) % 10;
return Integer.compare(lastDigitA, lastDigitB);
}
});
// 输出排序结果
StringJoiner result = new StringJoiner(",");
for (int num : numbers) {
result.add(String.valueOf(num));
}
System.out.println(result.toString());
}
}
六、效果展示
1、输入
1,2,5,-21,22,11,55,-101,42,8,7,32
2、输出
1,-21,11,-101,2,22,42,32,5,55,7,8
3、说明
🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 E卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。