2024华为OD机试(C卷+D卷)最新题库【超值优惠】Java/Python/C++合集
题目描述
给一个正整数列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输出:
13说明:
从1(索引为0)开始起跳,中间跳过4个数字因此依次删除 6,2,8,5,4,7。 剩余 1,3,9,返回和为13
题解
解题思路
- 初始化条件:我们首先计算需要删除的元素数量 cnt ,即
len(nums) - left
。- 跳跃规则:每次跳跃
jump
个元素,然后删除当前命中的元素。- 循环处理:循环 cnt 次,每次删除对应的元素。
- 最终结果:计算剩下元素的和。
代码实现
我们可以通过一个模拟删除过程的循环来实现这个需求,每次删除一个元素并调整当前索引。使用Python的列表操作,结合循环索引处理,实现这一过程。
Python
class Solution:def sumOfLeft(self, nums, jump, left):# 需要删除的次数cnt = len(nums) - left# 索引位置idx = 1for _ in range(cnt):# 计算下一次要删除的索引idx = (idx + jump) % len(nums)# 删除该索引位置的元素nums.pop(idx)return sum(nums)
🙏整理题解不易, 如果有帮助到您,请给点个赞 ❤️ 和收藏 ⭐,让更多的人看到。🙏🙏🙏