华为OD机试 2024C卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
给一个正整数列nums,一个跳数jump,及幸存数量left。运算过程为:从索引为0的位置开始向后跳,中间跳过 J 个数字,命中索引为 J+1的数字,该数被敲出,并从该点起跳,以此类推,直到幸存left个数为止。然后返回幸存数之和。
约束:
0是第一个起跳点。
起跳点和命中点之间间隔jump 个数字,已被敲出的数字不计入在内。
跳到末尾时无缝从头开始(循环查找),并可以多次循环。
若起始时 left > len(nums) 则无需跳数处理过程。
/**
*
* @param nums 正整数数列,长度范围 [1,10000]
* @param jump 跳数,范围 [1,10000]
* @param left 幸存数量,范围 [1,10000]
* @return 幸存数之和
*/
int sumOfLeft(int[] nums,int jump,int left)
二、输入描述
第一行输入正整数数列
第二行输入跳数
第三行输入幸存数量
三、输出描述
输出幸存数之和
1、输入
1,2,3,4,5,6,7,8,9
4
3
2、输出
13
3、说明
从1(索引为0)开始起跳,中间跳过4个数字因此依次删除 6,2,8,5,4,7。 剩余 1,3,9,返回和为13
四、解题思路
- 转换为列表:将整数数组转换为 ArrayList 以便进行元素的动态删除。
- 判断幸存数量:如果 left 大于或等于列表的大小,直接计算并返回整个列表的和,因为不需要执行任何删除操作。
- 删除元素:
- 初始化起始索引 index 为 1,因为问题描述从索引0开始。
- 使用循环不断移除元素,直到列表的大小缩减到 left 指定的数量。每次循环中:
- 计算删除元素的索引,使用 (index + jump) % nums.size() 来确保索引在合法范围内并能循环遍历列表。
- 删除当前索引处的元素。由于元素被删除后,列表大小会缩减,因此当前 index 会自然指向下一个元素的位置。
五、Java算法源码
public class OdTest01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line1 = scanner.nextLine();
int jump = Integer.parseInt(scanner.nextLine().trim());
int left = Integer.parseInt(scanner.nextLine().trim());
int[] numStrs = Arrays.stream(line1.split(",")).mapToInt(Integer::parseInt).toArray();
System.out.println(sumOfLeft(numStrs, jump, left));
}
private static int sumOfLeft(int[] arr, int jump, int left) {
ArrayList<Integer> nums =(ArrayList<Integer>) Arrays.stream(arr).boxed().collect(Collectors.toList());
if (left >= nums.size()) {
return nums.stream().mapToInt(Integer::intValue).sum(); // 如果剩余数量不需删除,直接返回和
}
int index = 1; // 初始索引
while (nums.size() > left) {
index = (index + jump) % nums.size(); // 计算需要删除的元素索引
nums.remove(index); // 删除元素
// 注意:删除后,index指向下一个元素的位置,即原位置的下一个元素成为新的起跳点
}
return nums.stream().mapToInt(Integer::intValue).sum(); // 计算并返回剩余元素的和
}
}
六、效果展示
1、输入
1,2,3,4,5,6,7,8,9
4
3
2、输出
13
3、说明
🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。