【华为OD-E卷 - 113 跳格子2 100分(python、java、c++、js、c)】

【华为OD-E卷 - 跳格子2 100分(python、java、c++、js、c)】

题目

小明和朋友玩跳格子游戏,有 n 个连续格子组成的圆圈,每个格子有不同的分数,小朋友可以选择以任意格子起跳,但是不能跳连续的格子,不能回头跳,也不能超过一圈;
给定一个代表每个格子得分的非负整数数组,计算能够得到的最高分数

输入描述

  • 给定一个数例,第一个格子和最后一个格子首尾相连,如: 2 3 2

输出描述

  • 输出能够得到的最高分,如: 3

备注

  • 1 ≤ nums.length ≤ 100 1 ≤ nums[i] ≤ 1000

用例

用例一:
输入:
2 3 2
输出:
3
用例二:
输入:
1 2 3 1
输出:
4

python解法

  • 解题思路:
  • 在这里插入图片描述
# 读取输入数据,将其转换为整数列表
vals = list(map(int, input().split()))# 计算线性数组的最大不相邻子序列和
def max_points(arr):n = len(arr)# 如果数组只有一个元素,直接返回它if n == 1:return arr[0]# 初始化 dp 数组p = [0] * n# 只有一个元素时,最大值就是该元素p[0] = arr[0]# 如果有两个元素,取较大的那个if n > 1:p[1] = max(arr[0], arr[1])# 动态规划填充数组for i in range(2, n):# 核心转移方程:当前最优解 = max(不选当前元素, 选当前元素)p[i] = max(p[i-1], p[i-2] + arr[i])# 返回最后一个位置的最大值,即最终结果return p[-1]# 计算环形数组的最大不相邻子序列和
def find_max():# 如果数组只有一个元素,直接返回它if len(vals) == 1:return vals[0]# 取两种情况的最大值return max(max_points(vals[:-1]), max_points(vals[1:]))# 输出最终结果
print(find_max())

java解法

  • 解题思路
  • 在这里插入图片描述
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 读取输入,使用空格分隔字符串,并转换为整数数组String[] input = sc.nextLine().split(" ");int[] vals = new int[input.length];for (int i = 0; i < input.length; i++) {vals[i] = Integer.parseInt(input[i]);}// 计算并输出最大得分System.out.println(findMax(vals));}// 计算线性数组的最大不相邻子序列和public static int maxPoints(int[] arr) {int n = arr.length;// 只有一个元素,直接返回它if (n == 1) {return arr[0];}// 动态规划数组int[] p = new int[n];// 初始状态p[0] = arr[0];// 只有两个元素时,取较大的if (n > 1) {p[1] = Math.max(arr[0], arr[1]);}// 递推填充动态规划数组for (int i = 2; i < n; i++) {p[i] = Math.max(p[i - 1], p[i - 2] + arr[i]);}// 返回最后一个位置的最大值return p[n - 1];}// 计算环形数组的最大不相邻子序列和public static int findMax(int[] vals) {int n = vals.length;// 如果数组只有一个元素,直接返回它if (n == 1) {return vals[0];}// 创建两个新的数组:// 1. vals1 代表去掉最后一个元素的子数组// 2. vals2 代表去掉第一个元素的子数组int[] vals1 = new int[n - 1];int[] vals2 = new int[n - 1];// 复制 vals[0] 到 vals[n-2] 形成 vals1System.arraycopy(vals, 0, vals1, 0, n - 1);// 复制 vals[1] 到 vals[n-1] 形成 vals2System.arraycopy(vals, 1, vals2, 0, n - 1);// 取两个子数组的最大得分return Math.max(maxPoints(vals1), maxPoints(vals2));}
}

C++解法

  • 解题思路
更新中

C解法

  • 解题思路

更新中

JS解法

  • 解题思路

  • 在这里插入图片描述

const readline = require("readline");const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});// 监听标准输入,读取一行数据
rl.on("line", (line) => {// 将输入字符串拆分成整数数组const nums = line.split(" ").map(Number);// 计算最大得分并输出console.log(computeMaxScore(nums));
});/*** 计算环形数组的最大不相邻子序列和* @param {number[]} nums 输入的环形数组* @returns {number} 最大得分*/
function computeMaxScore(nums) {const n = nums.length;// 如果数组只有一个元素,直接返回它if (n === 1) return nums[0];// 计算去掉最后一个元素 和 去掉第一个元素 两种情况的最大值return Math.max(calcMax(nums.slice(0, -1)), calcMax(nums.slice(1)));
}/*** 计算线性数组的最大不相邻子序列和(递归+记忆化)* @param {number[]} arr 线性数组* @returns {number} 最大得分*/
function calcMax(arr) {// 创建 memo 数组用于记忆化,初始值为 -1,表示未计算const memo = new Array(arr.length).fill(-1);// 调用递归计算最大得分return maxWithMemo(arr, arr.length - 1, memo);
}/*** 递归计算最大得分,使用记忆化优化* @param {number[]} arr 线性数组* @param {number} i 当前索引* @param {number[]} memo 记忆化数组* @returns {number} 计算到 i 位置的最大得分*/
function maxWithMemo(arr, i, memo) {// 边界情况:索引小于 0,返回 0(无贡献)if (i < 0) return 0;// 如果 memo[i] 已经计算过,直接返回if (memo[i] !== -1) return memo[i];// 计算当前索引的最优解,并存入 memo 数组memo[i] = Math.max(maxWithMemo(arr, i - 1, memo),       // 不取 arr[i],继承之前的最大值maxWithMemo(arr, i - 2, memo) + arr[i] // 取 arr[i],但必须跳过 arr[i-1]);return memo[i];
}

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek-R1 云环境搭建部署流程

DeepSeek横空出世&#xff0c;在国际AI圈备受关注&#xff0c;作为个人开发者&#xff0c;AI的应用可以有效地提高个人开发效率。除此之外&#xff0c;DeepSeek的思考过程、思考能力是开放的&#xff0c;这对我们对结果调优有很好的帮助效果。 DeepSeek是一个基于人工智能技术…

npm安装electron安装报错

npm安装electron巨慢&#xff0c;报错&#xff0c;换了镜像源也不好使&#xff0c;一般都是网络超时导致的。 cmd窗口执行&#xff1a;&#xff08;打开npm的配置文件&#xff09; npm config edit在配置文件中粘贴&#xff0c;并保存&#xff1a; registryhttps://regis…

x64、aarch64、arm与RISC-V64:详解四种处理器架构

x64、aarch64、arm与RISC-V64:详解四种处理器架构 x64架构aarch64架构ARM架构RISC-V64架构总结与展望在计算机科学领域,处理器架构是构建计算机系统的基石,它决定了计算机如何执行指令、管理内存和处理数据。x64、aarch64、arm与RISC-V64是当前主流的四种处理器架构,它们在…

项目顺利交付,几个关键阶段

年前离放假还有10天的时候&#xff0c;来了一个应急项目&#xff0c; 需要在放假前一天完成一个演示版本的项目&#xff0c;过年期间给甲方领导看。 本想的最后几天摸摸鱼&#xff0c;这么一来&#xff0c;非但摸鱼不了&#xff0c;还得加班。 还在虽然累&#xff0c;但也是…

昇思打卡营第五期(MindNLP特辑)番外:硅基流动 x 华为云DeepSeek V3 API推理MindTinyRAG

1.前言 前脚&#xff0c;DeepSeek面临的巨头企业官宣加入vs多国政府下场质疑的冰火两重天局势尚未平静&#xff08;DeepSeek在美两重天&#xff1a;五大巨头接入&#xff0c;政府诚惶诚恐&#xff09;&#xff1b;后脚&#xff0c;OpenAI被逼急&#xff0c;凌晨亮出全新推理…

MYSQL索引与视图

一、新建数据库 mysql> create database mydb15_indexstu; mysql> use mydb15_indexstu; 二、新建表 &#xff08;1&#xff09;学生表Student mysql> create table Student(-> Sno int primary key auto_increment,-> Sname varchar(30) not null unique,-…

使用java代码操作rabbitMQ收发消息

SpringAMQP 将来我们开发业务功能的时候&#xff0c;肯定不会在控制台收发消息&#xff0c;而是应该基于编程的方式。由于RabbitMQ采用了AMQP协议&#xff0c;因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息&#xff0c;都可以与RabbitMQ交互。并且RabbitMQ官方也…

介绍10个比较优秀好用的Qt相关的开源库

记录下比较好用的一些开源库 1. Qt中的日志库“log4qt” log4qt 是一个基于 Apache Log4j 设计理念的 Qt 日志记录库&#xff0c;它为 Qt 应用程序提供了强大而灵活的日志记录功能。Log4j 是 Java 领域广泛使用的日志框架&#xff0c;log4qt 借鉴了其优秀的设计思想&#xff…

【远程控制】安装虚拟显示器

todesk远程发现没显示器的机器有问题 电脑如果不外接一个显示器那么会默认为1024 768 分辨率需要安装虚拟显示器参考 竟然是一个隐私屏幕的解决方案。 虚拟显示器 Parsec-vdd 项目地址 Parsec-vdd 最大的优点是&#xff1a;支持 4K 高刷、可添加多个虚拟屏、 H-Cursor&#…

嵌入式面试题 C/C++常见面试题整理_7

一.什么函数不能声明为虚函数? 常见的不能声明为虚函数的有:普通函数(非成员函数):静态成员函数;内联成员函数;构造函数;友元函数。 1.为什么C不支持普通函数为虚函数?普通函数(非成员函数)只能被overload&#xff0c;不能被override&#xff0c;声明为虚函数也没有什么意思…

赛博算命之 ”梅花易数“ 的 “JAVA“ 实现 ——从玄学到科学的探索

hello~朋友们&#xff01;好久不见&#xff01; 今天给大家带来赛博算命第三期——梅花易数的java实现 赛博算命系列文章&#xff1a; 周易六十四卦 掐指一算——小六壬 更多优质文章&#xff1a;个人主页 JAVA系列&#xff1a;JAVA 大佬们互三哦~互三必回&#xff01;&#xf…

UNI-MOL: A UNIVERSAL 3D MOLECULAR REPRESENTATION LEARNING FRAMEWORK

UNI-MOL: A UNIVERSAL 3D MOLECULAR REPRESENTATION LEARNING FRAMEWORK Neurips23 推荐指数&#xff1a;#paper/⭐⭐⭐#​&#xff08;工作量不小) 动机 在大多数分子表征学习方法中&#xff0c;分子被视为 1D 顺序标记或2D 拓扑图&#xff0c;这限制了它们为下游任务整合…

【DeepSeek论文精读】3. DeepSeekMoE:迈向混合专家语言模型的终极专业化

欢迎关注[【AIGC论文精读】](https://blog.csdn.net/youcans/category_12321605.html&#xff09;原创作品 【DeepSeek论文精读】1. 从 DeepSeek LLM 到 DeepSeek R1 【DeepSeek论文精读】2. DeepSeek LLM&#xff1a;以长期主义扩展开源语言模型 【DeepSeek论文精读】3. DeepS…

AI 编程工具—Cursor 进阶篇 文章改写生成整理爬取

AI 编程工具—Cursor 进阶篇 文章改写生成整理爬取 其实对做自媒体的人而言,整理素材其实是一件非常耗时的事情,今天我们来看一下如何使用Cursor来帮我们解决这些问题,首先我们要建一个单独的项目,因为这个项目不涉及任何代码操作,只是文字相关的事情,还有就是这个项目需…

【Android开发AI实战】基于CNN混合YOLOV实现多车牌颜色区分且针对车牌进行矫正识别(含源码)

文章目录 引言单层卷积神经网络&#xff08;Single-layer CNN&#xff09;&#x1f4cc; 单层 CNN 的基本结构&#x1f4cc; 单层 CNN 计算流程图像 透视变换矫正车牌c实现&#x1fa84;关键代码实现&#xff1a;&#x1fa84;crnn结构图 使用jni实现高级Android开发&#x1f3…

LSSVM最小二乘支持向量机多变量多步光伏功率预测(Matlab)

代码下载&#xff1a;LSSVM最小二乘支持向量机多变量多步光伏功率预测&#xff08;Matlab&#xff09; LSSVM最小二乘支持向量机多变量多步光伏功率预测 一、引言 1.1、研究背景与意义 随着全球能源危机和环境问题的日益严重&#xff0c;可再生能源的开发利用成为了世界各国…

设计模式Python版 代理模式

文章目录 前言一、代理模式二、代理模式示例三、远程代理四、虚拟代理五、虚拟代理示例 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型…

自动化测试(selenium篇)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是自动化测试 自动化测试通俗一些来讲&#xff0c;就是相当于将人工测试手段进行转换&#xff0c;让代码去自动执行。 自动化测试主要分为&#xff1a;单元…

【大模型】DeepSeek与chatGPT的区别以及自身的优势

目录 一、前言二、核心技术对比2.1 模型架构设计2.1.1 ChatGPT的Transformer架构2.1.2 DeepSeek的混合架构 2.2 训练数据体系2.2.1 ChatGPT的数据特征2.2.2 DeepSeek的数据策略 三、应用场景对比3.1 通用场景表现3.1.1 ChatGPT的强项领域3.2.2 DeepSeek的专项突破 3.3 响应效率…

RK3568平台开发系列讲解(ConfigFS篇)ConfigFS核心数据结构

🚀返回专栏总目录 文章目录 一、数据结构二、结构体关系三、案例3.1、configfs_subsystem 实例3.2、config_group 实例化四、属性和方法五、config_item实例化沉淀、分享、成长,让自己和他人都能有所收获!😄 理解 ConfigFS 的核心数据结构对于深入使用和定制 ConfigFS 非…