求幸存数之和 - 华为OD统一考试

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

给一个正整数列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

题解

以上是题目的 Java、Python 和 C++ 解法。这个题目的主要思路是模拟起跳的过程,删除指定的数字,然后计算幸存数之和。

解题步骤如下:

  1. 计算需要删除的次数 cnt = len(nums) - left
  2. 使用循环进行删除操作,每次根据跳数 jump 计算下一个要删除的索引位置。
  3. 删除指定索引位置后面的元素,并更新数组长度。
  4. 计算剩余元素的和并返回。

这个题目主要涉及数组的操作,包括删除元素和前移元素,同时需要考虑循环查找的情况。在 Java 中使用 System.arraycopy 进行元素前移,而在 Python 和 C++ 中使用 poperase 进行元素删除。

在时间复杂度方面,主要是在循环中进行了数组的删除操作,整体的时间复杂度取决于数组删除操作的复杂度。在空间复杂度方面,除了输入参数外,主要使用了常数级的额外空间。

Java

/**
 * @author code5bug
 */
class Solution {
    /**
     * @param nums 正整数数列,长度范围 [1,10000]
     * @param jump 跳数,范围 [1,10000]
     * @param left 幸存数量,范围 [1,10000]
     * @return 幸存数之和
     */
    int sumOfLeft(int[] nums, int jump, int left) {
        int len = nums.length; // 正整数数列的长度
        int cnt = len - left;

        for (int i = 0, idx = 1; i < cnt; i++) {
            idx = (idx + jump) % len;
            // nums[idx] 后面的所有元素前移 1 位
            System.arraycopy(nums, idx + 1, nums, idx, len - idx - 1);
            len--;
        }

        int sum = 0;
        for (int i = 0; i < len; i++) {
            sum += nums[i];
        }

        return sum;
    }
}

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)

C++

class Solution {
public:
    int sumOfLeft(vector<int>& nums, int jump, int left) {
        int cnt = nums.size() - left;

        for(int i=0, idx = 1; i < cnt; i++) {
            idx = (idx + jump) % nums.size();
            nums.erase(nums.begin() + idx);
        }

        int sum = 0;
        for (int num : nums) {
            sum += num;
        }

        return sum;
    }
};

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/309232.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

netdisk-fast-download强大的网盘直链解析工具源码

源码介绍 开源的网盘直链解析工具 netdisk-fast-download&#xff0c;这款强大的工具能够解析各类网盘直链&#xff0c;实现文件的快速上传与下载。目前已完美支持蓝奏云、奶牛快传、移动云空间、UC网盘、夸克网盘、小飞机盘、亿方云以及123云盘等众多知名网盘平台。 直链&am…

Spark---行动算子RDD

文章目录 1.行动算子1.1 reduce1.2 collect1.3 first1.4 count1.5 take1.6 takeOrdered1.7 aggregate1.8 fold1.9 countByKey1.10 countByValue1.11 save 相关算子1.12 foreach 1.行动算子 Spark的行动算子是触发作业执行的方法&#xff0c;它们会直接触发计算并返回结果。 行…

【集合大练习】---------------简易学生管理系统

目标&#xff1a; 实现学生对象新增&#xff0c;删除&#xff0c;查看&#xff0c;对象信息修改 整体实现思路&#xff1a; 1.定义学生类-------------创建学生对象 2.管理界面代码编写-------------命令提示面板 3.添加学生的代码编写---------add功能实现 4.查看学生信…

PPT插件-大珩助手-清除同类

清除同类-颜色 对于选定的形状&#xff0c;删除相同颜色 清除同类-文本 删除当前幻灯片中的文本对象 清除同类-非文本 删除当前幻灯片中的非文本对象 清空当页 删除当前幻灯片中的所有对象 选中的形状动画 删除选中的对象上的形状动画 当前页形状动画 对于当前页中的…

HDFS相关API操作

文章目录 API文档环境配置API操作准备工作创建文件夹文件上传文件下载文件删除文件的更名和移动获取文件详细信息 API文档 HDFS API官方文档&#xff1a;https://hadoop.apache.org/docs/r3.3.1/api/index.html 环境配置 将Hadoop的Jar包解压到非中文路径&#xff08;例如D:…

移动通信原理与关键技术学习之信道编解码(5)

先回顾调制的过程&#xff1a;调制就是对信号源的信息进行处理加到载波上&#xff0c;使其变为适合于信道传输的形式的过程&#xff0c;就是使载波随信号而改变的技术。 1.什么是IQ调制&#xff1f; 答&#xff1a;将数据分为两路&#xff0c;分别进行载波调制&#xff0c;两…

多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测

多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测 目录 多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现RIME-HKELM霜冰算法优化混合核极限学…

2024年中国杭州|网络安全技能大赛(CTF)正式开启竞赛报名

前言 一、CTF简介 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的…

【开源】基于JAVA+Vue+SpringBoot的厦门旅游电子商务预订系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒店管理模块2.4 美食管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学生表3.2.3 学生表3.2.4 学生表 四、系统展示五、核心代码5.1 新增景点类型5.2 查询推荐的…

redis复习笔记04(小滴课堂)

新版SpringBoot2.X项目创建 在线创建springboot项目选择web和redis依赖就行。 SpringBoot2.x整合Redis客户端单元测试 SpringDataRedis配置RedisTemplate介绍 1.编写配置文件 2.单元测试进行测试&#xff1a; 可以看到我们设置进的值&#xff0c;乱码后面会解决。 获取不到设…

网络正常运行时间监控工具

正常运行时间是衡量系统可靠性的指标&#xff0c;表示为机器工作和可用时间的百分比。当提到 IT 网络时&#xff0c;正常运行时间是衡量网络设备、网站和其他服务的可用性的指标。网络正常运行时间通常以百分位数来衡量&#xff0c;例如“五个 9”&#xff0c;这意味着系统在 9…

RPA财务机器人在厦门市海沧医院财务管理流程优化汇总的应用RPA全球生态 2024-01-05 17:27 发表于河北

目前国内外研究人员对于RPA机器人在财务管理流程优化领域中的应用研究层出不穷&#xff0c;但现有研究成果主要集中在财务业务单一领域&#xff0c;缺乏财务管理整体流程一体化管控的研究。RPA机器人的功能绝非单一的财务业务处理&#xff0c;无论从自身技术发展&#xff0c;或…

如何使用vite框架封装一个js库,并发布npm包

前言介绍 最近&#xff0c;公司项目上需要把很多公用函数封装起来&#xff0c;作为一个公共的库使用。以前的做法是使用webpack或者Rollup。Rollup和Webpack都是常用的JavaScript模块打包工具&#xff0c;用于构建现代化的Web应用程序。但是&#xff0c;不管是webpack或者Roll…

Hive基础题-1

别看我&#xff0c;不看答案我也不会写 正因为不会写&#xff0c;所以才要每天一练 本地hive练习题 SET hive.exec.mode.local.autotrue; -- 默认 false SET hive.exec.mode.local.auto.inputbytes.max50000000; SET hive.exec.mode.local.auto.input.files.max5; -- 默认 4# …

docker 容器添加指定网络地址

docker 容器添加指定网络地址 在搭建halo博客时&#xff0c;准备让 halo、mysql8.1、nginx 三个容器在同一个网段中&#xff0c;并指定IP。 实现docker内部容器之间网络互通。 查看容器网络信息命令 docker inspect 容器名各容器部署成功后网络效果如下&#xff1a; nginx …

HCIP实验1

华子目录 实验拓扑实验要求实验步骤合理的划分网段配置IP地址RIP宣告路由全网可达&#xff08;V1与V2需相互兼容&#xff09;R2访问R7走R5访问R1为运营商&#xff0c;r1远程登录r2实际登录r7测试 实验拓扑 实验要求 实验步骤 合理的划分网段 配置IP地址 R1 R2 R3 R4 R5 …

国产化嵌入式AI芯片

中国在嵌入式AI芯片领域已经取得了显著进展&#xff0c;产生了许多有竞争力的品牌和产品。 以下是一些知名的中国嵌入式AI芯片品牌及其产品系列和特点&#xff1a; 华为海思&#xff08;HiSilicon&#xff09; 芯片系列&#xff1a;麒麟系列产品特点&#xff1a;麒麟系列在智能…

强化学习求解TSP(六):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于奖励的决策问题。它是一种无模型的学习方法&#xff0c;通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策&#xff0c;该函数表示在给定状态下采取某个动作所获…

【刷题篇】动态规划(八)

文章目录 1、分割回文串 IV2、分割回文串 II3、最长回文子序列4、让字符串成为回文串的最少插入次数5、最长公共子序列6、不相交的线 1、分割回文串 IV 给你一个字符串 s &#xff0c;如果可以将它分割成三个 非空 回文子字符串&#xff0c;那么返回 true &#xff0c;否则返回…

浅谈WPF之Popup弹出层

在日常开发中&#xff0c;当点击某控件时&#xff0c;经常看到一些弹出框&#xff0c;停靠在某些页面元素的附近&#xff0c;但这些又不是真正的窗口&#xff0c;而是页面的一部分&#xff0c;那这种功能是如何实现的呢&#xff1f;今天就以一个简单的小例子&#xff0c;简述如…