华为od机试真题:求幸存数之和(Python)

2024华为OD机试(C卷+D卷)最新题库【超值优惠】Java/Python/C++合集

华为OD机试

题目描述

给一个正整数列nums,一个跳数jump,及幸存数量left。运算过程为:从索引为0的位置开始向后跳,中间跳过 J 个数字,命中索引为 J+1的数字,该数被敲出,并从该点起跳,以此类推,直到幸存left个数为止。然后返回幸存数之和。

约束:

  1. 0是第一个起跳点。

  2. 起跳点和命中点之间间隔jump 个数字,已被敲出的数字不计入在内。

  3. 跳到末尾时无缝从头开始(循环查找),并可以多次循环。

  4. 若起始时 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

题解

解题思路

  1. 初始化条件:我们首先计算需要删除的元素数量 cnt ,即 len(nums) - left
  2. 跳跃规则:每次跳跃jump个元素,然后删除当前命中的元素。
  3. 循环处理:循环 cnt 次,每次删除对应的元素。
  4. 最终结果:计算剩下元素的和。

代码实现

我们可以通过一个模拟删除过程的循环来实现这个需求,每次删除一个元素并调整当前索引。使用Python的列表操作,结合循环索引处理,实现这一过程。

Python

class Solution:
    def sumOfLeft(self, nums, jump, left):
        # 需要删除的次数
        cnt = len(nums) - left
        # 索引位置
        idx = 1
        for _ in range(cnt):
            # 计算下一次要删除的索引
            idx = (idx + jump) % len(nums)
            # 删除该索引位置的元素
            nums.pop(idx)
        return sum(nums)

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

#华为od题库##华为od##华为##华为od机试##面经#
全部评论

相关推荐

缒梦&独舞:这家公司是这样的,去年给我实习offer了,不过也是面着玩儿的,他周六还要去做公益志愿活动
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务