华为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机试##面经#
全部评论

相关推荐

学java时间比较短不到三个月,基本的技术栈都过了一遍就是都不太深,有个小项目。是继续找实习还是沉淀准备秋招呢?找实习的话会花很多时间在八股,放弃的话又怕秋招简历太难看。有无大佬支招
今天java了吗:1.一定要找实习,实习不一定要去,但是找实习过程中的面试经验和心态经验才是最重要的 2.八股本来就是大头,甚至比项目重要 3.这个时间段也是面试比较多的阶段,可以抓住机会锻炼。面试才会发现自己的不足,感觉自己会了和能给面试官娓娓道来是两码事
点赞 评论 收藏
分享
点赞 评论 收藏
分享
若怜君欢:驾驶证去掉吧,PPT啥的也去掉,本硕课程去掉,导师和研究方向去掉;加入本硕排名(好才写);技能栏加入你会的那些控制算法和滤波算法,这个比你会啥啥啥软件更有用;获奖写上去,奖学金啊,有没有专利啊之类的 电机和硬件这一块,属于传统制造业,制造业实习并不多。多投一些攒攒经验,有实习最好,没有也不需要焦虑(制造业实习其实除了转正,没多大用处) 最后,划重点,等秋招开始后,把你所有社交软件都发一份简历上去,并经常更新,找人内推你!
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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