菜菜的刷题日记 | 猜数字?我还真猜不到(力扣374)

news/2024/7/1 22:18:43 标签: leetcode, 算法, 排序算法, python, 后端

请添加图片描述

系列索引:菜菜的刷题日记 | 被LeetCode用Python狂虐的那段日子

菜菜的修仙之路——2022/1/18
今晚看了一会儿数据结构排序算法,发现之前对排序掌握的并不是很全面,像希尔这种都不会写,白天出门了,又是摆烂的一天。

文章目录

    • 【题目】
    • 【我的代码】
    • 【参考代码1】二分查找
    • 【参考代码2】官方题解
    • 【思考】

【题目】

猜数字游戏的规则如下:

每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。

如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。

你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0):

-1:我选出的数字比你猜的数字小 pick < num
1:我选出的数字比你猜的数字大 pick > num
0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num

返回我选出的数字。

  • 难度:简单

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

【我的代码】

本来想摆,但一想到都坚持了这么多天了不能断火呀,既然写了题就顺道把题解奉上,今日事今日毕!
个人水平有限,大佬勿嘲 [/抱拳]
在这里插入图片描述
主要是双指针的思想。

python">class Solution:
    def guessNumber(self, n: int) -> int:
        i = 0
        j = n+1
        while i < j:
            point = int(i+(j-i)/2) #参考下面的最好写成 point = i + (j - i) // 2 
            if guess(point) == 0:
                return point
            elif guess(point) == -1:
                j = point
            elif guess(point) == 1:
                i = point

我觉得算法效率低也可能是我重复调用guess函数造成的。
在这里插入图片描述
后面我又试了一次,果然啊,看来一些小细节还是会影响很大效率的。

python">class Solution:
    def guessNumber(self, n: int) -> int:
        i = 0
        j = n+1
        while i < j:
            point = i+(j-i)//2
            temp = guess(point)
            if temp == 0:
                return point
            elif temp == -1:
                j = point
            elif temp == 1:
                i = point

【参考代码1】二分查找

其实这道题大家看看也就图一乐,考察的就是单纯地分析思维。某大佬只是和我用的指针初始位置不同,我是放在了1~n的两端,下面代码则是从其本身开始并结束的。

python">class Solution:
    def guessNumber(self, n: int) -> int:
        left = 1
        right = n
        while left <= right:
            mid = left + (right - left) // 2
            ans = guess(mid)
            if ans == 1:
                left = mid + 1
            elif ans == -1:
                right = mid - 1
            else:
                return mid
        return 0

【参考代码2】官方题解

二分时,记当前区间为 [left,right],初始时 left=1,right=n。记区间中间元素为 mid,若有 guess(mid)≤0 则说明 pick∈[left,mid],否则 pick∈[mid+1,right]。当区间左右端点相同时,则说明我们找到了答案,退出循环。

python">class Solution:
    def guessNumber(self, n: int) -> int:
        left, right = 1, n
        while left < right:
            mid = (left + right) // 2
            if guess(mid) <= 0:
                right = mid   # 答案在区间 [left, mid] 中
            else:
                left = mid + 1   # 答案在区间 [mid+1, right] 中
        
        # 此时有 left == right,区间缩为一个点,即为答案
        return left
        

【思考】

print('Good Night')

Python力扣题解系列持续更新,欢迎点赞收藏关注

上一篇:菜菜的刷题日记 | 215. 数组中的第K个最大元素
下一篇:菜菜的刷题日记 | 9. 回文数

本人水平有限,文章中不足之处欢迎下方👇评论区批评指正~

如果感觉对你有帮助,点个赞👍 支持一下吧 ~

不定期分享 有趣、有料、有营养内容,欢迎 订阅关注 🤝 我的博客 ,期待在这与你相遇 ~


http://www.niftyadmin.cn/n/1425833.html

相关文章

菜菜的Python学习日记 | 正则表达式你必须了解的知识点

系列索引&#xff1a;菜菜的Python学习日记 | Python从入门到入土详解 文章目录常用规则Python对正则表达式的支持常用规则 符号解释示例说明.匹配任意字符b.t可以匹配bat / but / b#t / b1t等\w匹配字母/数字/下划线b\wt可以匹配bat / b1t / b_t等但不能匹配b#t\s匹配空白字符…

修改带图片的

修改带图片的先显示原先的图片(hidden src"取数据库中的") String src su.getRequest().getParameter("src"); com.jspsmart.upload.File myFile su.getFiles().getFile(0); String img myFile.getFileName(); String imgname su.getRequest().get…

菜菜的Python学习日记 | 多进程和多线程详解

系列索引&#xff1a;菜菜的Python学习日记 | Python从入门到入土详解 今天我们使用的计算机早已进入多CPU或多核时代&#xff0c;而我们使用的操作系统都是支持“多任务”的操作系统&#xff0c;这使得我们可以同时运行多个程序&#xff0c;也可以将一个程序分解为若干个相对独…

程序中下载限速如何实现

应该是在服务器上控制吧。 每个用户连接时记录开始时间&#xff0c;通信时记录已传输数量。 已传输数量除通信连接时间就是速率。 用timer定时扫描每个连接&#xff0c;如果发现某用户速率过大&#xff0c;在接收或者发送数据时加sleep延迟。。 try{Thread…

菜菜的刷题日记 | 1629. 按键持续时间最长的键

系列索引&#xff1a;菜菜的刷题日记 | 被LeetCode用Python狂虐的那段日子 菜菜的修仙之路——2022/1/19 又是摆烂的一天。 文章目录【题目】【我的代码】【思考】【题目】 难度&#xff1a;简单 题目链接&#xff1a;https://leetcode-cn.com/problems/slowest-key/ 【我的代…

菜菜的Python学习日记 | 蓝桥杯2021年第十二届省赛真题-双向排序

系列索引&#xff1a;菜菜的Python学习日记 | Python从入门到入土详解 今天写了道蓝桥杯真题&#xff0c;题并不难&#xff0c;但是要输入数据&#xff0c;这和以往的题目还不太一样&#xff0c;需要以空格作为结尾。而input函数输入的一个字符串&#xff0c;因此需要对输入值进…

菜菜的Python学习日记 | Python进阶笔记(生成式、常用算法、函数定义和调用时都加*,有什么作用?)

系列索引&#xff1a;菜菜的Python学习日记 | Python从入门到入土详解 今天开始学习Python语言进阶部分。 文章目录一、生成式二、常用算法三、Python函数定义和调用时都加*&#xff0c;有什么作用&#xff1f;一、生成式 prices2 {key: value for key, value in prices.item…

svn版本控制说明

服务端subversion(svn)版本控制工具服务器端 V1.4.exe新建文件夹 d:/svn SVNService -install -d -r d:/svn 安装 Windows 服务开服务svnserve -d -r d:/svn (自动开启的, D:/Program Files/Subversion/bin>sc create svnservice binpath "d:/Program Files/Subversion…