39.猜数字大小Ⅱ(dedium)

【虚拟化生态平台】虚拟化平台esxi挂载USB硬盘 虚拟化平台安装好之后,一般情况下,只有一个硬盘在工作,其他的外接硬盘(我的只有一个ssd硬盘,其他的均是usb外接,SATA接口的硬盘是否这样我暂时不清楚哈)没有在工作,但是一个硬盘明显不够我们使用的,所以我们需要去挂载外接的硬盘来扩容。... 阅读详情

1.题目链接:375. 猜数字大小 II - 力扣(LeetCode)375. 猜数字大小 II - 我们正在玩一个猜数游戏,游戏规则如下: 1. 我从 1 到 n 之间选择一个数字。 2. 你来猜我选了哪个数字。 3. 如果你猜到正确的数字,就会 赢得游戏 。 4. 如果你猜错了,那么我会告诉你,我选的数字比你的 更大或者更小 ,并且你需要继续猜数。 5. 每当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。如果你花光了钱,就会 输掉游戏 。给你一个特定的数字 n ,返回能够 确保你获胜 的最小现金数,不管我选择那个数字 。 示例 1:[https://assets.leetcode.com/uploads/2020/09/10/graph.png]输入:n = 10输出:16解释:制胜策略如下:- 数字范围是 [1,10] 。你先猜测数字为 7 。  - 如果这是我选中的数字,你的总费用为 $0 。否则,你需要支付 $7 。  - 如果我的数字更大,则下一步需要猜测的数字范围是 [8,10] 。你可以猜测数字为 9 。  - 如果这是我选中的数字,你的总费用为 $7 。否则,你需要支付 $9 。  - 如果我的数字更大,那么这个数字一定是 10 。你猜测数字为 10 并赢得游戏,总费用为 $7 + $9 = $16 。  - 如果我的数字更小,那么这个数字一定是 8 。你猜测数字为 8 并赢得游戏,总费用为 $7 + $9 = $16 。  - 如果我的数字更小,则下一步需要猜测的数字范围是 [1,6] 。你可以猜测数字为 3 。  - 如果这是我选中的数字,你的总费用为 $7 。否则,你需要支付 $3 。  - 如果我的数字更大,则下一步需要猜测的数字范围是 [4,6] 。你可以猜测数字为 5 。  - 如果这是我选中的数字,你的总费用为 $7 + $3 = $10 。否则,你需要支付 $5 。  - 如果我的数字更大,那么这个数字一定是 6 。你猜测数字为 6 并赢得游戏,总费用为 $7 + $3 + $5 = $15 。  - 如果我的数字更小,那么这个数字一定是 4 。你猜测数字为 4 并赢得游戏,总费用为 $7 + $3 + $5 = $15 。  - 如果我的数字更小,则下一步需要猜测的数字范围是 [1,2] 。你可以猜测数字为 1 。  - 如果这是我选中的数字,你的总费用为 $7 + $3 = $10 。否则,你需要支付 $1 。  - 如果我的数字更大,那么这个数字一定是 2 。你猜测数字为 2 并赢得游戏,总费用为 $7 + $3 + $1 = $11 。在最糟糕的情况下,你需要支付 $16 。因此,你只需要 $16 就可以确保自己赢得游戏。示例 2:输入:n = 1输出:0解释:只有一个可能的数字,所以你可以直接猜 1 并赢得游戏,无需支付任何费用。示例 3:输入:n = 2输出:1解释:有两个可能的数字 1 和 2 。- 你可以先猜 1 。  - 如果这是我选中的数字,你的总费用为 $0 。否则,你需要支付 $1 。  - 如果我的数字更大,那么这个数字一定是 2 。你猜测数字为 2 并赢得游戏,总费用为 $1 。最糟糕的情况下,你需要支付 $1 。 提示: * 1 <= n <= 200https://leetcode.cn/problems/guess-number-higher-or-lower-ii/description/

2.题目描述:

我们正在玩一个猜数游戏,游戏规则如下:
             a. 我从 1 到 n 之间选择一个数字。​
             b. 你来猜我选了哪个数字。​
             c. 如果你猜到正确的数字,就会 赢得游戏 。​
             d. 如果你猜错了,那么我会告诉你,我选的数字比你的 更大或者更小 ,并且你需要继续猜数。​         

             e. 每当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。如果你花光了钱,就会输掉游戏 。​
    给你一个特定的数字 n ,返回能够 确保你获胜 的最小现金数,不管我选择那个数字 。​​
示例 1:​

        输入:n = 10​
        输出:16​
解释:制胜策略如下:
•     数字范围是 [1,10] 。你先猜测数字为 7 。​
 - 如果这是我选中的数字,你的总费用为 $0 。否则,你需要支付 $7 。​
 - 如果我的数字更大,则下一步需要猜测的数字范围是 [8,10] 。你可以猜测数字为 9 。​
         - 如果这是我选中的数字,你的总费用为 $7 。否则,你需要支付 $9 。​
         - 如果我的数字更大,那么这个数字一定是 10 。你猜测数字为 10 并赢得游戏,总费用为 $7 + $9 = $16 。​
         - 如果我的数字更小,那么这个数字一定是 8 。你猜测数字为 8 并赢得游戏,总费用为 $7 + $9 = $16 。​
 - 如果我的数字更小,则下一步需要猜测的数字范围是 [1,6] 。你可以猜测数字为 3 。​
         - 如果这是我选中的数字,你的总费用为 $7 。否则,你需要支付 $3 。​
         - 如果我的数字更大,则下一步需要猜测的数字范围是 [4,6] 。你可以猜测数字为 5 。​
         - 如果这是我选中的数字,你的总费用为 $7 + $3 = $10 。否则,你需要支付 $5 。​
         - 如果我的数字更大,那么这个数字一定是 6 。你猜测数字为 6 并赢得游戏,总费用为 $7 + $3 + $5 = $15 。​
         - 如果我的数字更小,那么这个数字一定是 4 。你猜测数字为 4 并赢得游戏,总费用为 $7 + $3 + $5 = $15 。​

                  - 如果我的数字更小,则下一步需要猜测的数字范围是 [1,2] 。你可以猜测数字为 1 。​
                  - 如果这是我选中的数字,你的总费用为 $7 + $3 = $10 。否则,你需要支付 $1 。​
                  - 如果我的数字更大,那么这个数字一定是 2 。你猜测数字为 2 并赢得游戏,总费用为 $7 + $3 + $1 = $11 。​
     在最糟糕的情况下,你需要支付 $16 。因此,你只需要 $16 就可以确保自己赢得游戏。​
     示例 2:​
             输入:n = 1​
             输出:0​
             解释:只有一个可能的数字,所以你可以直接猜 1 并赢得游戏,无需支付任何费用。​
     示例 3:​
             输入:n = 2​
             输出:1​
             解释:有两个可能的数字 1 和 2 。​
              ◦    你可以先猜 1 。​
                 - 如果这是我选中的数字,你的总费用为 $0 。否则,你需要支付 $1 。​
                 - 如果我的数字更大,那么这个数字一定是 2 。你猜测数字为 2 并赢得游戏,总费用为 $1 。​    最糟糕的情况下,你需要支付 $1 。​
     提示:
             1 <= n <= 200​
3. 解法(暴搜 -> 记忆化搜索):​
算法思路:
暴搜:
         a. 递归含义:给 dfs  一个使命,给他一个区间 [left, right] ,返回在这个区间上能完胜的最小费用;
         b. 函数体:选择 [left, right]  区间上的任意一个数作为头结点,然后递归分析左右子树。求出所有情况下的最小值;​
        c. 递归出口:当 left >= right  的时候,直接返回 0 。​

记忆化搜索:
a. 加上一个备忘录;

b. 每次进入递归的时候,去备忘录里面看看;​

c. 每次返回的时候,将结果加入到备忘录里面。

Java算法代码:

class Solution {
    int [][] memo;

    public int getMoneyAmount(int n) {
        memo = new int[n+1][n+1];
        return dfs(1,n);
    }

    public int dfs(int left, int right) {
        if(left >= right) return 0;
        if(memo[left][right] != 0) return memo[left][right];
        int ret = Integer.MAX_VALUE;
        for( int head = left; head <= right; head++){
            int x = dfs(left, head - 1);
            int y = dfs(head + 1,right);
            ret = Math.min(Math.max(x,y) + head, ret);
        }
        memo[left][right] = ret;
        return ret;
    }
}

运行结果:

递归展开:

这里笔者简单做两句解释,一个是先找最大的(再一个二叉搜索树中,看那个比较大,也就是从那个叉上来比较大。),然后再这里找到的所有的大的值里面取最小的。

逻辑展开:笔者这里是通过n=3来进行展开,并且同时以二叉搜索树的形式来画(笔者可以思考一下)。为什么这里的二叉搜索树。

---------------------------------------------------------------------------------------------------------------------------------

记住,相信你的递归函数,它可以做到!

记住,不理解时候,去尝试手动展开!

记住,逻辑展开(你不可能对所有的题目都进行手动展开)!

周志华《机器学习》课程系列笔记——目录导航页 最近自学机器学习课程,注意到了南京大学周志华老师的课程。我是在学堂在线平台观看的,注意到b站上也有相应视频,但b站上并未获得授权,随时有消失的可能。周志华老师的网络教学视频中,与其西瓜书相比确实少了一些内容。但幸运的是,缺失的内容实际上对于初学者来说并不会产生太大影响。目前这一笔记也遵循视频内容,相比西瓜书中也会有一些缺失,敬请谅解。可能以后如果有机会和时间,我会再阅读周志华老师的书籍将缺失内容补全。一切内容敬请关注我的个人Page页面。 阅读详情

相关推荐

5个实战必备的多模态情感分析数据集(附下载链接与避坑指南)

本文精选了5个实战必备的多模态情感分析数据集,包括CMU-MOSEI、CH-SIMS、UR-FUNNY、MUStARD和IEMOCAP,并提供了详细的下载链接与避坑指南。文章重点介绍了如何高效获取、预处理这些数据集,并自然整合了多模态情感分析的核心热词,旨在帮助研究者和开发者快速启动项目,规避常见陷阱,聚焦模型创新。

yolo5detector的博客 280

算法数据结构——记忆化搜索(Memoization Search)算法超详细总结加应用案例讲解

记忆化搜索(Memoization Search):是一种通过存储已经遍历过的状态信息,从而避免对同一状态重复遍历的搜索算法。记忆化搜索是动态规划的一种实现方式。在记忆化搜索中,当算法需要计算某个子问题的结果时,它首先检查是否已经计算过该问题。如果已经计算过,则直接返回已经存储的结果;否则,计算该问题,并将结果存储下来以备将来使用。举个例子,比如「斐波那契数列」的定义是:$f(0) = 0, f(1) = 1, f(n) = f(n - 1) + f(n - 2)$。

白话机器学习 1万+

深入理解Cornerstone3D.js渲染Stack影像数据

这个是调用的core\src下的init.ts的init方法,作用是:初始化cornerstone-core,检测客户端是否支持WebGL,默认情况下是支持中等GPU层级.另外一个重要的是实例化WebWorkManager.WebWorkManager类似于Java的线程池,是用来对Web Worker进行管理的管理器。使用DICOMwebClient获取影像文件的元数据,然后将它们缓存到imageLoader的metaDataManager中,在上面我们可以输出元数据看一下是什么。

wangwei19820517的博客 1493

算法:记忆化搜索

概述 记忆化搜索是一种典型的空间换时间的思想。 记忆化搜索的典型应用场景是可能经过不同路径转移到相同状态的dfs问题。 更明确地说,当我们需要在有层次结构的图(不是树,即当前层的不同节点可能转移到下一层的相同节点)中自上而下地进行dfs搜索时,大概率我们都可以通过记忆化搜索的技巧降低时间复杂度。 例子:青蛙过河 题目描述 一只青蛙想要过河。 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。 青蛙可以跳上石子,但是不可以跳入水中。 给你石子的位置列表 stones(用单

weixin_38889219的博客 1万+

《数据结构》04-树4 是否同一棵二叉搜索树

题目 给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。 输入格式: 输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要...

叫我皮卡丘 2012

从后端角度浅谈抗辐射设计----三模冗余(TMR)

三模冗余设计(TMR),是最常用的一种容错技术,三个模块采取相同的操作,以多数相同的输出作为表决系统的正确输出,即3取2,因为三个模块是相互独立的,而其中两个模块同时出错的概率是极小的,因此便可保证系统输出的可信度。然而这个设计也会存在面积浪费,功耗的增加,而且由于是冗余的设计,在后续进行综合或者pr的时候会被工具优化,因此需要对模块进行don’t touch设置;通过增值表得到,逻辑关系表达式为:Q=(Q1&Q2)|(Q1&Q3)|(Q2&Q3),通过工艺库的stdcell进行搭建,得到如下电路。

芯冰乐 327

【递归、搜索与回溯】记忆化搜索

【递归、搜索与回溯】记忆化搜索

fight_p的博客 2275

华为OD机试双机位C卷-流水线(Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 流水线,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 流水线。

qq_45776114的博客 2266

记忆化搜索

记忆化搜索是一种搜索的形式,对搜索的结果用数组或其他数据结构记录下来。若当前状态搜索过了,则返回已存储的答案。这样,每个状态最多计算1次。 我们以斐波那契数列为例,用递归实现的fib数组计算代码是这样的: 搜索树是长这样的 我们可以发现,为了求Fib(5)Fib(5)Fib(5),会先求Fib(4)Fib(4)Fib(4),然后求出Fib(3)Fib(3)Fib(3).在求Fib(4)Fib(4)Fib(4)的时候,实际上已经把Fib(3)Fib(3)Fib(3)求出来了,而求Fib(5)Fib(5)Fi

AliceK1008的博客 4303

【DRAM存储器四十七】LPDDR5介绍--LPDDR5的低功耗技术之DVFS

讲述LPDDR5的DVFSC和DVFSQ的工作原理和要求

highman110的博客 902

头歌OpenGauss数据库-G.视图的使用

OpenGauss数据库-G.视图的使用

python一生之敌的博客 1384

【算法】记忆化搜索

记忆化搜索

2203_76003626的博客 1723

【SemiDrive源码分析】【X9芯片启动流程】11 - freertos_safetyos目录Cortex-R5 DIL2.bin 引导程序源代码分析

【SemiDrive源码分析】【X9芯片启动流程】11 - freertos_safetyos目录Cortex-R5 DIL2.bin 引导程序源代码分析

|~~~热爱生活、努力学习的小伙汁~~~| 2109

【算法/学习】:记忆化搜索

✨ 落魄谷中寒风吹,春秋蝉鸣少年归 🌏📃​。

island1314的博客 6296

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

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

计算机控制技术及应用

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

【基础算法】记忆化搜索

在 DFS 中创建一个备忘录,记录已经计算过的结果,这样的策略就是记忆化搜索。

2401_87820834的博客 1108

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

记忆化搜索 Memorization Search

记忆化搜索 Memorization Search什么是记忆化搜索记忆化搜索函数的三个特点记忆化搜索 vs 动态规划三种适用于DP的场景三种不适用于DP的场景Examples:Leetcode 140: 单词拆分 IILeetcode 44: 通配符匹配 什么是记忆化搜索 在递归函数中, 在函数返回前,记录函数的返回结果。在下一次以同样参数访问函数时直接返回记录下的结果 也就是对递归树进行剪枝,遇到已经计算过的节点就不再继续往下计算,直接返回储存在hash table中的值 记忆化搜索函数的三个特点

HelloWorld 2224

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

动态规划入门——记忆化搜索

动态规划之记忆化搜索,包含原理讲述已经相关代码实现。

涛涛的个人博客 5945

【递归、搜索与回溯算法】记忆化搜索

本篇文章列举了五个经典的LeetCode算法题目,包括斐波那契数、不同路径、最长递增子序列、猜数字大小 II和矩阵中的最长递增路径。我会在每道题中提到每道题的解题思路,并提供解决本题的C++代码。

是阿建吖! 1329

动态规划5:动态规划与记忆化搜索

本期主题:动态规划与记忆化搜索

小辉的数学博客 3721

算法沉淀——记忆化搜索(leetcode真题剖析)

记忆化搜索算法(Memoization)是一种通过存储已经计算过的结果来避免重复计算的优化技术,通常应用于递归算法中。这种技术旨在提高算法的效率,减少重复计算,特别是对于具有重叠子问题的问题。

立志做一个高产且细节博主 2198

猜数字大小java项目

​​​​​​​1:先设定一个: int k = (int)(Math.random()*100);生成0到100的随机数。2:设置一个:int g;为获取键盘输入猜测的数字。3:提示用户在键盘上输入的数字范围:System.out.println("请输入您猜测的数字(0-100):");4:获取键盘的输入数字:5:int g获取键盘输入的数字。Integer.parseInt强制类型转换为int型。6:​​if(g!=k) {

m0_69887041的博客 479

【leetcode】记忆化搜索

记忆化搜索

m0_70088010的博客 724

Java-猜数字大小

每轮游戏,我都会从 1 到 n 随机选择一个数字。请你猜选出的是哪个数字。0:我选出的数字和你猜的数字一样。如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。-1:我选出的数字比你猜的数字小 pick < num。1:我选出的数字比你猜的数字大 pick > num。输入:n = 10, pick = 6。输入:n = 1, pick = 1。输入:n = 2, pick = 1。输入:n = 2, pick = 2。

weixin_60588588的博客 537

递归、搜索与回溯算法(专题六:记忆化搜索)

递归、记忆化搜索和动态规划、回溯算法

ANNE_fly的博客 2904

递归---记忆化搜索

首先,啥是记忆化搜索呢?记忆化搜索就是通过一个备忘录去记录多个完全相同子问题的结果,第一次遇到这个子问题时,就将这个子问题的结果记录在一个备忘录中,当下次遇到这个问题时,就直接去备忘录中找结果即可,其中备忘录可以是数组或者是一个哈希表。

2302_80826557的博客 1009
上一篇: 37.不同路径(medium)
下一篇: 40.矩阵中的最长递增路径
咔_
博客等级 码龄4年 948粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值