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

这题难点在于不能直接使用二分法,举个例子:如果n=5,则1、2、3、4、5,那么先选4,再选2,和为6是最小的,而不是传统二分法的先选3,再选4,和为7。并且这题求的是最好的最坏,也就是min(max())

1、递归+二分法(超时)

int getMoneyAmount(int n) {return func(1,n);}int func(int low,int high){if(low>=high) return 0;int cost=INT_MAX;for(int i=low;i<=high;i++){cost=min(cost,i+max(func(low,i-1),func(i+1,high)));//如果选了i的花费}return cost;}

2、递归+二分法优化(超时)

先找最坏情况,因为右边比较大,所以只要每次选择右边代价更高。

int getMoneyAmount(int n) {return func(1,n);}int func(int low,int high){if(low>=high) return 0;int cost=INT_MAX;for(int i=(low+high)/2;i<=high;i++){cost=min(cost,i+max(func(low,i-1),func(i+1,high)));}return cost;}

3、动态规划

还是得动态规划

dp[i][j] 代表在(i,j)中最坏情况的最小开销

状态转移

//i<=j<=i+len,每次选择j的最坏代价,并且从中取最小值
dp[i][i+len]=min(j+max(dp[i][j-1],dp[j+1][i+len])

所以是三层循环

int getMoneyAmount(int n) {vector<vector<int>> dp(n+1,vector<int>(n+1,0));for(int len=1;len<n;len++){for(int i=1;i<=n-len;i++){int count=INT_MAX;for(int j=i;j<i+len;j++){count=min(count,j+max(dp[i][j-1],dp[j+1][i+len]));}dp[i][i+len]=count;}}return dp[1][n];
}

如图,帮助理解

如(1,3)区间取2是最小结果;(1,4)区间取3、1,3+1=4是最小结果;(1,5)区间取4、2,4+2=6是最小结果。

leetcode算法题--猜数字大小 II★★相关推荐

  1. ​LeetCode刷题实战375:猜数字大小 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  2. 【LeetCode】第374题——猜数字大小(难度:简单)

    [LeetCode]第374题--猜数字大小(难度:简单) 题目描述 解题思路 代码详解 注意点 题目描述 猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪 ...

  3. Java实现 LeetCode 374 猜数字大小 II

    375. 猜数字大小 II 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了. 然而,当你猜 ...

  4. 375. 猜数字大小 II

    375. 猜数字大小 II 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字. 你来猜我选了哪个数字. 如果你猜到正确的数字,就会 赢得游戏 . 如果你猜错了,那么我会告诉你 ...

  5. leetcode - 375. 猜数字大小 II

    解题思路:这道题目的意思是我告诉你一个n值,然后我会在1到n之间选一个数字,让你来猜我选了哪个数. 我们需要意识到我们在范围 (1, n)中猜数字的时候,需要考虑最坏情况下的代价.也就是说要算每次都猜 ...

  6. C++题解-Leecode 375. 猜数字大小 II——Leecode每日一题系列

    今天是坚持每日一题打卡的第十七天 题目链接:https://leetcode-cn.com/problems/guess-number-higher-or-lower-ii/submissions/ ...

  7. LeetCode 375. 猜数字大小 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小 ...

  8. Leetcode 375. 猜数字大小 II 解题思路及C++实现

    方法一:递归 解题思路: 设置一个dp数组,dp[i][j] 表示从数字 i 到 j ,保证猜中所选数字所需的最小花费. 在数字 i 到 j 之间进行猜测时,我们选择数字 i < k < ...

  9. leetcode 375. Guess Number Higher or Lower II | 375. 猜数字大小 II(动态规划思路总结)

    题目 https://leetcode.com/problems/guess-number-higher-or-lower-ii/ 题解 首先,看了 Related Topics,知道这是个 dp 问 ...

最新文章

  1. Java网络编程——11.非阻塞I/O
  2. maven nexus memory optimization
  3. Windows下及Mac下的IntelliJ IDEA快捷键
  4. Python 多种算法模型对比
  5. Scala入门到精通——第二十三节 高级类型 (二)
  6. cop2000计算机组成原理,COP2000计算机组成原理实验系统
  7. Linux之环境变量
  8. 前端学习(2971):前一天回顾
  9. logstash安装
  10. 容器编排技术 -- Kubernetes StatefulSet基本使用
  11. Unity MeshBaker 合并网格和材质
  12. Qt 模态对话框不模态的问题
  13. 实战系列-Spring Boot跨域解决方案
  14. catia螺纹孔在二维图上不显示_螺钉的螺纹是搓牙加工的,那么螺母的螺纹是怎么加工的呢...
  15. DotNet 学习笔记
  16. call 在mysql,在MYSQL上选择CASE和CALL程序
  17. KE之undefinded instruction问题记录
  18. 十大最热门人工智能技术
  19. Matlab Four-Wheel Drive Testbed
  20. lumion材质系统室内渲染6.3

热门文章

  1. 自学python需要买书吗-Python真的适合每个人学习吗 学习Python需要多久
  2. python爬虫案例-Python3爬虫三大案例实战分享
  3. python简单编程例子-Python入门 —— 用pycharm写一个简单的小程序3
  4. python线下培训-北京哪里有Python线下培训辅导班
  5. python语言基础-Python语言基础与应用
  6. python3下载教程-Python3完全零基础入门精讲 全套视频教程
  7. docker快速入门教程
  8. NVIDIA Jetson NX开发板在U盘挂载的时候出现:error mounting unknown filesystem type ‘exfat‘错误
  9. zuul框架设计与实现
  10. javascript高级程序设计之基本概念