系列索引:菜菜的刷题日记 | 被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. 回文数
本人水平有限,文章中不足之处欢迎下方👇评论区批评指正~如果感觉对你有帮助,点个赞👍 支持一下吧 ~
不定期分享 有趣、有料、有营养内容,欢迎 订阅关注 🤝 我的博客 ,期待在这与你相遇 ~