猜数字大小II

LeetCode 猜数字大小II(动态规划) 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。 然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。 示例: n = 10, 我选择了8. 第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大一些,然后你需要支付5块。 ... 阅读详情

一、题目描述

题目链接:https://leetcode-cn.com/problems/guess-number-higher-or-lower-ii/

 

二、题目分析

本题暴力的解法是使用回溯,假设每次挑到的数都不是结果,然后递归计算左右两边剩余数组需要至少需要多少钱才能赢。递归停止的条件为数组只剩1个数。

然而在递归的过程中会有重复计算的情况,若我们选择2,则计算右边数组时会计算[4,5,6],若选择3,计算右边的数组也会计算[4,5,6],因此可以使用动态规划的方法进行优化。

我们使用数组dp[start][end]来代表从数字start到数字end至少需要的钱数。具体过程请见代码

 

三、代码

    public int getMoneyAmount(int n) {
        int[][] dp = new int[n+1][n+1];
        // 这里i代表end
        for (int i = 1; i <= n; i ++ ) {
            // j代表start
            for (int j = i - 1; j >= 1; j --) {
                // 遍历[j,i],目的是找到一个肯定能赢的选法,这个选法需要的钱最少
                // min表示在[j,i]中,能获胜的至少钱数
                int min = Integer.MAX_VALUE;
                // k代表当前选的数
                for (int k = i; k >= j; k --) {
                    // 如果k在两端,或者在两端的相邻位,对应的左右费用为0,因为已经可以确定目标了
                    int left = (k == j || k-1 == j) ? 0 : dp[j][k-1];
                    int right = (k == i || k+1 == i) ? 0 : dp[k+1][i];
                    min = Math.min(min, k + Math.max(left,right));
                }
                dp[j][i] = min;
            }
        }
        return dp[1][n];
    }

 

Java实现 LeetCode 374 猜数字大小 II 375. 猜数字大小 II 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。 然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。 示例: n = 10, 我选择了8. 第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大... 阅读详情

相关推荐

375. 猜数字大小 II

dp[i][j]: 表示在猜[i, j]区间内数字时,最小的现金支出。这道题是区间动态规划与 Minimax 思维关键在于理解“最小化最大损失”;状态转移必须考虑每次猜错的最坏情况;动态规划从小区间向大区间扩展,有效避免重复计算。掌握这类题,可以为你攻克其他高难度博弈题目打下良好基础。

Lucy_wzw的博客 588

【四十四】【算法分析与设计】记忆化递归(2),375. 猜数字大小 II,记忆化递归和动态规划的联系,329. 矩阵中的最长递增路径,不同方式的暴力递归(递归图节点定义不同--->是否存在重复节点),

我们正在玩一个猜数游戏,游戏规则如下:我从1到n之间选择一个数字。你来猜我选了哪个数字。如果你猜到正确的数字,就会。如果你猜错了,那么我会告诉你,我选的数字比你的,并且你需要继续猜数。每当你猜了数字x并且猜错了的时候,你需要支付金额为x的现金。如果你花光了钱,就会。给你一个特定的数字n,返回能够的最小现金数,。n = 1016制胜策略如下: 数字范围是 [1,10]。你先猜测数字为 7。在最糟糕的情况下,你需要支付 $16。因此,你只需要 $16 就可以确保自己赢得游戏。n = 10。

m0_74163972的博客 781

手把手教你用STM32CubeMX和HAL库驱动DW3000:从SPI配置到第一个测距Demo

本文详细介绍了如何使用STM32CubeMX和HAL库驱动DW3000 UWB定位通信模块,从SPI配置到实现厘米级测距Demo的全过程。涵盖硬件连接、SPI通信调试、驱动移植及双向测距(TWR)算法实现,帮助开发者快速掌握UWB高精度定位技术,适用于仓储物流、智能家居等场景。

weixin_27038245的博客 485

JAVA程序设计: 猜数字大小 II(LeetCode:375)

我们正在玩一个猜数游戏,游戏规则如下: 我从1到 n 之间选择一个数字,你来猜我选了哪个数字。 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。 然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。 示例: n = 10, 我选择了8. 第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大一些,然后你需要...

信仰.的博客 808

保姆级教程:用Python+MM-Agent搭建自己的数学建模AI助手(支持GPT-4o/DeepSeek)

本文提供了一份详细的教程,教你如何使用Python和MM-Agent框架搭建数学建模AI助手,支持GPT-4o和DeepSeek-R1等LLM后端。从环境配置、HMML知识库集成到多LLM适配和建模流程实现,手把手教你构建智能建模系统,提升数学建模效率。

k6l7m8n9的博客 453

MobaXterm破解14个会话限制的保姆级教程(附Python环境配置指南)

本文提供了MobaXterm破解14个会话限制的详细教程,并深入讲解了如何配置稳定的Python环境以支持相关脚本运行。通过理解软件授权机制、安全实践步骤以及许可文件的应用,帮助用户解除会话数量限制,实现高效的远程服务器管理与自动化运维。

weixin_29211309的博客 1674

leetcode375.猜数字大小2

题目大意 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。 然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。 示例: n = 10, 我选择了8. 第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大一些,然后你需要支付5块。 第二轮: 你猜是7,我告诉你,我的数字更大一些,你支付7块。 第三轮: 你猜是9,我告诉你,我的数字

大腿壮的博客 647

esp32移植canopen协议栈(二)

本文续接上一篇文章,之前我们已经搭建好了esp32的开发环境,以及初始工程。接下来我们开始实现can驱动相关,以及使用c++封装can接口。本文使用esp32实现c++实现can驱动层的封装。下一步移植canopen!!!嘻嘻。

qq_50267418的博客 1909

猜数字大小II(力扣刷题)

题目 猜数字大小II 题解: 暴力 import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static int calculate(int low, int high) { if (low >= h...

qq_45353823的博客 658

工创赛智能搬运小车实战:视觉定位、底盘控制与RTOS调度

智能搬运系统是嵌入式控制与机器视觉融合的典型工程实践,其核心在于视觉定位精度、运动控制稳定性与实时任务调度能力。在有限算力(如STM32H7)、低功耗约束和结构化场景下,传统CV方法(如FAST+RANSAC)比轻量级深度学习更具鲁棒性与实时性;而底盘控制需穿透PID表层,直击死区补偿、编码器硬件滤波与负载自适应等物理层细节;RTOS则不是炫技工具,而是保障多模块时序确定性的刚需——尤其在视觉-控制-执行强耦合链路中,任务优先级、事件组通信与栈安全直接影响系统存活。本文聚焦全国大学生工程训练竞赛(工创赛)真

weixin_29194693的博客 276

LE AUDIO---Volume Control Service

LE AUDIO---Volume Control Service

weixin_42162924的博客 165

详解 leetcode 猜数字大小 II

375. 猜数字大小 II 原题链接375. 猜数字大小 II 题目下方给出了几个提示: 游戏的最佳策略是减少最大损失,这引出了 Minimax 算法,见这里,和这里 使用较小的数开始(例如3),看看在最差的情况下你要支付多少钱? 即使 n 比较小,完全使用递归的效率也很低,试试动态规划吧。 我们就按照上面的提示玩一把:猜数字大小 II。 当 n = 3,那么我们有 3 个选择:1 ...

weixin_30820151的博客 255

Vek385评估板(二):板子联网 & memtester安装(LPDDR5X测试)

继上一篇文章:Vek385评估板(一):EDF成功烧录启动及一些问题。 本章完成最主要的两个功能:开发板联网+内存 memtester。因为我是做测试行业的,所以这两个是最想试的。内存测试,除了FPGA测,也可以系统级测,本次在versal上实现这个功能,主要是可以应急。在没有安卓、X86的情况下,可以使用本方案测试。 下一篇会继续做一些其他功能。

千歌叹尽执夏的博客 224

LeetCode 375 猜数字大小 II

猜数字大小 II 题目 思路 矩阵链乘法 https://www.baidu.com/link?url=57aywD0Q6WTnl7XKbIHuE7lcWGXh50Vy3z1lItKlmdBVCmwKnGAabf1b8YFFijUxeTWEk-kwrJNcVhJuUksguHQoQSX28BhmhSYUIGt8Yi_&wd=&eqid=8c7298ba0003d06600000...

shidonghang的博客 251

超实用Kimi越狱提示词!AI红队实战研究、无损保留原生功能、仅突破模型安全限制边界

超实用Kimi越狱提示词!AI红队实战研究、无损保留原生功能、仅突破模型安全限制边界

Chengbei11的博客 1741

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[HOT 100] 0375. 猜数字大小 II

返回能够 确保你获胜 的最小现金数,不管我选择那个数字。

人生需要动态规划 学习需要贪心算法 862

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

力扣解题思路:375. 猜数字大小 II

368. 最大整除子集 思路: 借鉴一下别人的动态规划的思路,dp[i][j]表示从[i,j]中猜出正确数字所需要的最少花费金额(dp[i][i] = 0)。 假设在范围[i,j]中选择x, 则选择x的最少花费金额为: max(dp[i][x-1], dp[x+1][j]) + x 用max的原因是我们要计算最坏反馈情况下的最少花费金额(选了x之后, 正确数字落在花费更高的那侧) 初始化为(n+2)*(n+2)数组的原因: 处理边界情况更加容易, 例如对于求解dp[1][n]时x如果等于1, 需要考虑dp[

qq_39879315的博客 416

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

375. 猜数字大小II

375. 猜数字大小 II 难度:中等 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。 然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。 示例: n = 10, 我选择了8. 第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大一些,然后你需要支付5块。 第二轮: 你猜是7,我告诉你,我的数字更大一些,你支付7块。 第三轮:

Finish_Hou 208

leetcode 375 猜数字大小II

dfs函数用于返回[left,right]区间内,获得游戏胜利的最少钱数;如果left==right,表示找到了叶子节点,也就是猜到了这个数字,不用给钱,直接返回0就行。如果left>right,表示该区间里没有数字,直接返回0。所以,if(left>=right) ,return 0即可。1>变量ret用于记录最终的返回值,初始化为INT_MAX;2>从left开始循环枚举;

2301_80296866的博客 506

力扣375.猜数字大小 II

【代码】力扣375.猜数字大小 II。

Pisasama的博客 339

猜数字大小II[动态规划解决什么问题?]

其实动态规划的 时间复杂度 & 空间复杂度 往往还是在那里的,所以很多无法一下解决的问题(但你感觉模拟会有很多情况时!),往往需要分解成有相同性质但规模更小的子问题,并进行一步步迭代求到最后的最优解。 这需要有动态规划直觉 & 锻炼出来的分析能力,往往才能完成动态规划!...

qq_43164662的博客 202

LeetCode每日一题375. 猜数字大小 II

375. 猜数字大小 II 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字。 你来猜我选了哪个数字。 如果你猜到正确的数字,就会 赢得游戏 。 如果你猜错了,那么我会告诉你,我选的数字比你的 更大或者更小 ,并且你需要继续猜数。 每当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。如果你花光了钱,就会 输掉游戏 。 给你一个特定的数字 n (1 <= n <= 200),返回能够 确保你获胜 的最小现金数,不管我选择那个数字。 示例1: 输入:n

weixin_46566527的博客 310

LeetCode 375 - 猜数字大小 II

LeetCode 375「猜数字大小 II」是一道典型的“看起来像二分,实际上是博弈 + 动态规划”的题。 很多人第一眼都会想:这不就是二分查找吗? 但一旦你真正开始算“最坏情况下要花多少钱”,就会发现这题完全不是在问“猜得快不快”,而是在问:

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 881

Leetcode 375. 猜数字大小 II C++

Leetcode 375. 猜数字大小 II 题目 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。 然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。 示例: n = 10, 我选择了8. 第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大一些,然后你需要支付5块。 第二轮: 你猜是7,我告诉你,我的数字更大一些,你支付7块

weixin_43750513的博客 350

375. 猜数字大小 II-动态规划

375. 猜数字大小 II ![请添加图片描述](https://img-blog.csdnimg.cn/7d3e30ce1893432cb68f0d8c34a9e2c6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAbGM1MjB4eXA=,size_18,color_FFFFFF,t_70,g_se,x_16) 这道题使用动态规划来解决, dp[i][j]表示的是,第i到第j结

lcxyplucky的博客 462

记忆化搜索系列一>猜数字大小II

【代码】记忆化搜索系列一>猜数字大小II。

robin_suli的博客 303
上一篇: 最高的广告牌
下一篇: Java与Python间通过socket的调用
称字逃
博客等级 码龄14年 13粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值