文章目录

  • 题目描述
  • 思路 && 代码
    • 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、动态规划)相关推荐

  1. 每日一题:299. 猜数字游戏

    解题思路 利用HashMap记录字符和其对应的下标集合 代码 class Solution {public String getHint(String secret, String guess) {S ...

  2. 【LeetCode笔记 - 每日一题】384. 打乱数组(Java、洗牌算法)

    文章目录 题目描述 思路 && 代码 题目描述 中等题,很赞!第一次碰到涉及洗牌算法的题 有点涉及概率,主要是要实现公平的随机 思路 && 代码 采用了 Knuth 洗 ...

  3. leetcode 299. Bulls and Cows | 299. 猜数字游戏(Java)

    题目 https://leetcode.com/problems/bulls-and-cows/ 题解 一个踩比赞多的题,给我的感觉是中规中矩没啥特点,不知道在考察什么.. 思路是,用数组维护一个 m ...

  4. 375. 猜数字大小 II

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

  5. java猜数字游戏应用程序_猜数字游戏的Java小程序

    /* 猜数字游戏: 1,产生随机数. 2,获取键盘录入. 3,将录入数据变成数字,和随机数比较. 给出提示信息. 4,重复这个过程,如果猜中,程序就结束. 注意:对于输入1~100以外的数字,,以及非 ...

  6. java猜数字游戏总结,java课程设计——猜数字游戏

    java课程设计--猜数字游戏 目目 录录 前言. 1 正文. 1 1 1.设计任务与要求.设计任务与要求 1 1.1 1.1 设计任务与要求设计任务与要求 1 1.2 1.2 选题目的与意义选题目的 ...

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

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

  8. 【LeetCode笔记】299. 猜数字游戏 (Java、偏数学)

    文章目录 题目描述 思路 && 代码 题目描述 顶级阅读题! 今天的每日一题,感觉评论区大佬的写法挺值得记录的,就又水了一篇答题文- 思路 && 代码 O(n).O(1 ...

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

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

最新文章

  1. CSW:闪电网络是一种证券,BCH避开了它
  2. 使用 laravel 命令安装 Laravel
  3. Ubuntu配置静态ip联网总结
  4. CVPR 2021 论文和开源项目合集(Papers with Code)
  5. Appointment get entity debug
  6. Ubuntu下升级安装gcc-7.5.0教程
  7. python 等号 什么编码_Python运算符与编码
  8. 解决ueditor百度富文本编辑器图片可以上传但是在线管理图片无法显示
  9. Win7系统安装的方法,电脑重装系统win7
  10. 魅蓝手机ROOT权限获取
  11. 计算机专业那种高薪,中科院计算所博士平均年薪都超过50万了,计算机专业真是可以无脑选的那种...
  12. 在CentOS 7 安装Calamari
  13. SPIKE创新科技套装做探路机器人(上)
  14. 最原始最古老的家谱是哪种?采取怎样的形式传承给后代?
  15. 一道简单的CTF登录题题解
  16. SpringSecurityOauth中token(Basic、Bearer)
  17. JavaScript (上篇)
  18. 玩转树莓派---详解树莓派的系统烧录,基础使用及基于树莓派制作手势控制的小车(附详细代码及演示效果)
  19. 微信小程序原生开发学习01
  20. 计算几何与图形学有关的几种常用算法(二)

热门文章

  1. java 并发 set_高并发下的Java数据结构(List、Set、Map、Queue)
  2. 海上瓶子下有东西吗_洗衣液瓶子我从来不扔,瓶身这样剪几刀,解决了很多家庭的大烦恼...
  3. C++ 指向子类的指针转型为指向父类类型指针之后指向的对象地址不变
  4. Debug Assertion Failed _CrtlsValidHeapPointer(block) realloc堆引发的错误
  5. C语言ODBC连接MySQL数据库制作简易用户登录系统
  6. python解析xml+得到pascal voc xml格式用于目标检测+美化xml
  7. unet实现区域分割
  8. dlib+vs2013+opencv实现人脸特征点检测
  9. java正则匹配的坑_java正则表达式入坑指南
  10. composer 路径_深入学习Composer原理(三)