【LeetCode笔记 - 每日一题】375. 猜数字游戏 II (Java、DFS、动态规划)
文章目录
- 题目描述
- 思路 && 代码
- DFS
- 动态规划
新系列~用于区分开高频题和每日一题~
题目描述
- 一眼二分,但是实际上并不是
- 这题让我想到社团的猜数字游戏…但是给钱是真过分了= =
思路 && 代码
DFS
- 自底向上进行递归。
- Math.max():因为可能选左边,也可能选右边~选取最大的,作为保证
class Solution {static int[][] cache = new int[201][201]; // 200 是最大npublic int getMoneyAmount(int n) {return dfs(1, n);}int dfs(int l, int r) {if(l >= r) return 0; // 就一个,不用猜if(cache[l][r] != 0) return cache[l][r]; // 已算过,剪枝int ans = Integer.MAX_VALUE; // 维护当前区间的最小值// 遍历区间值,每个都猜for(int x = l; x <= r; x++) {// 自底向上 dfs,选取较大的一个(毕竟要保证,所以左右都可能)int cur = Math.max(dfs(l, x - 1), dfs(x + 1, r)) + x; ans = Math.min(ans, cur); // 选取}// 维护 cachecache[l][r] = ans;return ans;}
}
动态规划
- 总体思路和 DFS 差不多,注意顺序保证无后效性
class Solution {public int getMoneyAmount(int n) {int[][] dp = new int[n + 2][n + 2]; // 前后边界,+1 +1for(int i = n; i >= 1; --i) {// [j, i] 范围内for(int j = i; j <= n; ++j) {if(i == j) dp[i][j] = 0; // 就一个,不用判了else {dp[i][j] = Integer.MAX_VALUE; // 维护 dp[i][j] 的最小值。选取 [i][k - 1]、[k + 1][j] 的最大值// 在 [i, j] 中选一个for(int k = i; k <= j; ++k) {int cur = Math.max(dp[i][k - 1], dp[k + 1][j]) + k;dp[i][j] = Math.min(dp[i][j], cur);}}}}return dp[1][n];}
}
【LeetCode笔记 - 每日一题】375. 猜数字游戏 II (Java、DFS、动态规划)相关推荐
- 每日一题:299. 猜数字游戏
解题思路 利用HashMap记录字符和其对应的下标集合 代码 class Solution {public String getHint(String secret, String guess) {S ...
- 【LeetCode笔记 - 每日一题】384. 打乱数组(Java、洗牌算法)
文章目录 题目描述 思路 && 代码 题目描述 中等题,很赞!第一次碰到涉及洗牌算法的题 有点涉及概率,主要是要实现公平的随机 思路 && 代码 采用了 Knuth 洗 ...
- leetcode 299. Bulls and Cows | 299. 猜数字游戏(Java)
题目 https://leetcode.com/problems/bulls-and-cows/ 题解 一个踩比赞多的题,给我的感觉是中规中矩没啥特点,不知道在考察什么.. 思路是,用数组维护一个 m ...
- 375. 猜数字大小 II
375. 猜数字大小 II 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字. 你来猜我选了哪个数字. 如果你猜到正确的数字,就会 赢得游戏 . 如果你猜错了,那么我会告诉你 ...
- java猜数字游戏应用程序_猜数字游戏的Java小程序
/* 猜数字游戏: 1,产生随机数. 2,获取键盘录入. 3,将录入数据变成数字,和随机数比较. 给出提示信息. 4,重复这个过程,如果猜中,程序就结束. 注意:对于输入1~100以外的数字,,以及非 ...
- java猜数字游戏总结,java课程设计——猜数字游戏
java课程设计--猜数字游戏 目目 录录 前言. 1 正文. 1 1 1.设计任务与要求.设计任务与要求 1 1.1 1.1 设计任务与要求设计任务与要求 1 1.2 1.2 选题目的与意义选题目的 ...
- C++题解-Leecode 375. 猜数字大小 II——Leecode每日一题系列
今天是坚持每日一题打卡的第十七天 题目链接:https://leetcode-cn.com/problems/guess-number-higher-or-lower-ii/submissions/ ...
- 【LeetCode笔记】299. 猜数字游戏 (Java、偏数学)
文章目录 题目描述 思路 && 代码 题目描述 顶级阅读题! 今天的每日一题,感觉评论区大佬的写法挺值得记录的,就又水了一篇答题文- 思路 && 代码 O(n).O(1 ...
- LeetCode 375. 猜数字大小 II(DP)
文章目录 1. 题目 2. 解题 1. 题目 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小 ...
最新文章
- CSW:闪电网络是一种证券,BCH避开了它
- 使用 laravel 命令安装 Laravel
- Ubuntu配置静态ip联网总结
- CVPR 2021 论文和开源项目合集(Papers with Code)
- Appointment get entity debug
- Ubuntu下升级安装gcc-7.5.0教程
- python 等号 什么编码_Python运算符与编码
- 解决ueditor百度富文本编辑器图片可以上传但是在线管理图片无法显示
- Win7系统安装的方法,电脑重装系统win7
- 魅蓝手机ROOT权限获取
- 计算机专业那种高薪,中科院计算所博士平均年薪都超过50万了,计算机专业真是可以无脑选的那种...
- 在CentOS 7 安装Calamari
- SPIKE创新科技套装做探路机器人(上)
- 最原始最古老的家谱是哪种?采取怎样的形式传承给后代?
- 一道简单的CTF登录题题解
- SpringSecurityOauth中token(Basic、Bearer)
- JavaScript (上篇)
- 玩转树莓派---详解树莓派的系统烧录,基础使用及基于树莓派制作手势控制的小车(附详细代码及演示效果)
- 微信小程序原生开发学习01
- 计算几何与图形学有关的几种常用算法(二)
热门文章
- java 并发 set_高并发下的Java数据结构(List、Set、Map、Queue)
- 海上瓶子下有东西吗_洗衣液瓶子我从来不扔,瓶身这样剪几刀,解决了很多家庭的大烦恼...
- C++ 指向子类的指针转型为指向父类类型指针之后指向的对象地址不变
- Debug Assertion Failed _CrtlsValidHeapPointer(block) realloc堆引发的错误
- C语言ODBC连接MySQL数据库制作简易用户登录系统
- python解析xml+得到pascal voc xml格式用于目标检测+美化xml
- unet实现区域分割
- dlib+vs2013+opencv实现人脸特征点检测
- java正则匹配的坑_java正则表达式入坑指南
- composer 路径_深入学习Composer原理(三)