华为OD机试真题 Java 实现【跳格子2】【2023 B卷 100分】,附详细解题思路

在这里插入图片描述

一、题目描述

小明和朋友玩跳格子游戏,有n个连续格子组成的圆圈,每个格子有不同的分数,小朋友可以选择从任意格子起跳,但是不能跳连续的格子,不能回头跳,也不能超过一圈。

给定一代表每个格子得分的非负整数数组,计算能够得到的最高分数。

二、输入描述

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

三、输出描述

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

四、解题思路

动态规划算法将原问题视作若干个重叠子问题的逐层递进,每个子问题的求解过程都构成一个阶段。

在完成前一个阶段的计算之后,动态规划才会进入到下一个阶段的计算。

动态规划算法解决了“子问题重叠性质”问题,子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。

动态规划算法会对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的效率。

  1. 因为①数组首尾相连、②不能连续跳,所以要分而治之,采取动态规划算法;
  2. 包含第一个数字,但不包含最后一个数字的为一组;
  3. 不包含第一个数字,但包含最后一个数字的为一组;
  4. 采取动态规划算法,获取两组数据中的最大值;

五、Java算法源码

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    // 每个格子有不同的分数
    int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

    // 一共有多少个格子
    int n = arr.length;

    switch (n){
        case 1:
            System.out.println(arr[0]);
            break;
        case 2:
            System.out.println(Math.max(arr[0],arr[1]));
            break;
        default:
            // 因为①数组首尾相连、②不能连续跳,所以要分而治之,采取动态规划算法
            int[] arr1 = new int[n - 1];
            int[] arr2 = new int[n - 1];

            for (int i = 0; i < n; i++) {
                // 包含第一个数字,但不包含最后一个数字的为一组;
                if (i != n - 1) {
                    arr1[i] = arr[i];
                }

                // 不包含第一个数字,但包含最后一个数字的为一组;
                if (i != 0) {
                    arr2[i - 1] = arr[i];
                }
            }

            // 获取两组数据中的最大值
            System.out.println(Math.max(getMax(arr1), getMax(arr2)));
            break;
    }
}

/**
 * 动态规划
 * 
 * 获取两组数据中的最大值
 */
public static int getMax(int[] nums) {

    int[] dp = new int[nums.length];
    dp[0] = nums[0];

    for (int i = 1; i < nums.length; i++) {
        if (i == 1) {
            dp[i] = Math.max(nums[i], dp[i - 1]);
        } else {
            dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);
        }
    }

    return dp[nums.length - 1];
}

六、效果展示

1、输入

1 5 2 3 4 1

2、输出

9

3、说明

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

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

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

相关文章

3.9 流水作业调度问题

博主简介&#xff1a;一个爱打游戏的计算机专业学生博主主页&#xff1a; 夏驰和徐策所属专栏&#xff1a;算法设计与分析 1.我对流水调度问题的理解 流水作业调度问题是动态规划中的一个经典问题&#xff0c;它涉及将一系列作业分配给多个工作站以最小化总完成时间。该问题的…

练习:有限状态机测试

练习&#xff1a;有限状态机测试 1 FSM 示例 在练习中&#xff0c;我们将使用两个 FSM。 两者都有输入字母 X {a, b} 和输出字母 Y {0,1}。 第一个 FSM 将称为 M1 并由以下有向图表示。 对于上面给出的每个 FSM Mi&#xff1a; 1.确定以下值&#xff0c;显示您的工作。 (a…

内存对齐原则

struct &#xff08;1&#xff09;结构体第一个数据成员放在offset为0的地方&#xff0c;后面每个成员相对于结构体首地址的偏移量&#xff08;offset&#xff09;都是成员大小&#xff08;该变量类型所占字节&#xff09;的整数倍&#xff0c;如有需要编译器会在成员之间加上填…

非煤矿山电子封条系统算法方案 opencv

非煤矿山电子封条系统算法部署方案是基于pythonopencv网络模型Ai视频图像识别技术&#xff0c;非煤矿山电子封条系统算法部署方案对出入井人员、人员变化及非煤矿山生产作业状态等状况&#xff0c;及时发现处理异常动态将自动发出警报。OpenCV的全称是Open Source Computer Vis…

研报精选230528

目录 【行业230528华金证券】传媒行业深度研究&#xff1a;AIGC最新应用与场景研究 【行业230528国海证券】电动船舶行业深度报告&#xff1a;绿色智能大势已至&#xff0c;驶向电化百亿蓝海 【行业230528华西证券】纺织服装行业周报&#xff1a;5月增长放缓无碍中长期出清逻辑…

Vue.js 中的过滤器和计算属性

Vue.js 中的过滤器和计算属性 Vue.js 是一款流行的 JavaScript 框架&#xff0c;它提供了一种简单而灵活的方式来构建交互式 Web 应用程序。在 Vue.js 中&#xff0c;过滤器和计算属性是两个常用的概念。它们可以帮助开发者更方便地处理数据&#xff0c;提高代码的可读性和可维…

【Linux】进程状态与进程优先级

目录 一、什么是进程二、进程状态1、Linux下的进程状态2、两个特殊进程1、僵尸进程2、孤儿进程 三、进程优先级 一、什么是进程 进程就是程序的一个执行实例&#xff0c;也就是正在执行的程序&#xff0c;然后由操作系统帮助我们将程序转化为进程&#xff0c;完成特定的任务。…

山区特殊场景的倾斜摄影三维模型数据出现几何坐标偏差原因,如何修正这些坐标偏差?

山区特殊场景的倾斜摄影三维模型数据出现几何坐标偏差原因&#xff0c;如何修正这些坐标偏差&#xff1f; 山区倾斜摄影三维模型数据出现几何坐标偏差的原因可能有很多&#xff0c;其中一些常见的原因包括不同地图投影系统之间的转换问题、GPS定位误差、测量设备精度问题、摄影…

AI+边缘,是如何加速制造转型的?

在现代工业中&#xff0c;提起智慧工厂、智能制造有一个经久不衰的话题&#xff0c;那便是IT和OT的融合。 IT&#xff08;Information Technology&#xff09;部门专注于处理数据&#xff0c;整个业务系统需要它来维持运营。而OT&#xff08;Operation Technology&#xff09;…

实战Windows Chrome 0day

遇到挑战跟挫折的时侯&#xff0c;我有一个坚定的信念&#xff0c;我可以断气&#xff0c;但绝不能放弃 漏洞复现 实战Windows Chrome 0day需要满足的条件 第一点是关闭沙箱环境 第一种方式 设置Chrome浏览器的快捷方式 在快捷方式上增加 -no-sandbox 第二种方式 命令行命令…

Studio One6简体中文版全新版本功能详解

Studio One 6是一款强大的音乐编曲软件,可以帮助您使用灵活的和弦轨道功能实现音乐创作。通过新的智能模板、直观的拖放工作流、可定制的用户界面和强大的集成工具&#xff0c;使创建快速而轻松。 无论你选择 Studio One 哪个版本&#xff0c;你都可以得到无限的音轨、通道和插…

微信小程序原生开发功能合集十八:系统主题及自定义主题功能实现

本章实现系统主题监听及相应处理,包括暗黑色、亮色等。并实现自定义主题控制相关功能,可通过菜单进行主题的切换。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: ht…

SpringBoot+Vue 的简历招聘系统

文章目录 1、效果演示2、 前言介绍3、主要技术4 **系统设计**4.1 系统体系结构4.2开发流程设计4.3 数据库设计原则4.4 数据表 5 **系统详细设计**5.1管理员功能模块5.2用户功能模块5.3前台首页功能模块 6、源码获取 1、效果演示 2、 前言介绍 随着科学技术的飞速发展&#xff…

Three.js--》实现3d圣诞贺卡展示模型

目录 项目搭建 初始化three.js基础代码 加载环境模型 设置环境纹理 添加水面并设置阴影效果 实现幽灵小球的运动 实现相机切换和文字切屏 实现漫天星星和爱心样式 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目…

笔试强训8

作者&#xff1a;爱塔居 专栏&#xff1a;笔试强训 作者简介&#xff1a;大三学生&#xff0c;希望和大家一起进步 day13 一. 单选 1.下列关于视图的说法错误的是&#xff1a; A 视图是从一个或多个基本表导出的表&#xff0c;它是虚表B 视图一经定义就可以和基本表一样被查询…

SSM 如何使用 Redis 实现缓存?

SSM 如何使用 Redis 实现缓存&#xff1f; Redis 是一个高性能的非关系型数据库&#xff0c;它支持多种数据结构和多种操作&#xff0c;可以用于缓存、队列、计数器等场景。在 SSM&#xff08;Spring Spring MVC MyBatis&#xff09;开发中&#xff0c;Redis 可以用来实现数…

皮卡丘CSRF

1.CSRF&#xff08;get&#xff09; 首先看提示&#xff0c;我们选择用户kobe&#xff0c;密码123456登录 点击修改个人信息&#xff0c;假如用户要把住址改为shanxi 再点击submit&#xff0c;同时用bp抓包&#xff0c;我们可以看到是get请求&#xff0c;数据包含在URL之中 将…

NCI架构-1

1、NFCC和DH通过物理连线相连&#xff0c;物理连线对应为Transport Layer&#xff08;传输层&#xff09;&#xff0c;支持SPI、I2C、UART、USB等&#xff1b; 2、DH中所有和NFC相关的应用程序都可视为DH-NFCEE(EE:Execution Enviroment)&#xff0c;图左的NFCEE模块可运行一些…

Jetson nano之ROS入门 - - 机器人建模与仿真

文章目录 前言一、URDF建模1. URDF语法详解a. robotb. linkc. joint 2. URDF机器人建模实操 二、Xacro宏优化1、 Xacro宏语法详解2、 Xacro建模实操 三、Rviz与Gazebo仿真1、Gazebo集成URDF建模语法基础2、Gazebo集成URDF实操 总结 前言 在ROS中&#xff0c;机器人建模和仿真是…

Android AIDL Callback的使用(配源码)

零、示例说明 本示例&#xff0c;完成的功能是&#xff1a;客户端向服务端注册一个回调&#xff0c;服务端是一个商店shop&#xff0c;当商店里的产品 Product 有变化时&#xff0c;调用回调向通知客户端&#xff0c;什么商品更新了。 一、完整源代码 完整源码链接: https:/…