1.这是一篇数据结构学习的开头,仅供个人参考以及博主:-小黄怪- 参考学习。
2.主要是拿来给自己做笔记的,学啥记啥,有意思的就记。
3.接下来的日子,不定时更新,内容看个人学习,yeah,加油。
本文主要是为了解决LeetCode上二分查找的应用问题,寻找第一个错误的版本。
题目:
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
假设你有 n
个版本 [1, 2, ..., n]
,你想找出导致之后所有版本出错的第一个错误的版本。
你可以通过调用 bool isBadVersion(version)
接口来判断版本号 version
是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。
输出结果:
示例1:
输入:n = 5, bad = 4 输出:4 解释:调用 isBadVersion(3) -> false 调用 isBadVersion(5) -> true 调用 isBadVersion(4) -> true
所以,4 是第一个错误的版本。
示例2:
输入:n = 2, bad = 2 输出:2
示例3:
输入:n = 1, bad = 1 输出:1
思路:
跟之前写非递归的二分查找类似,主要是需要注意在判断是否为bad值时,True或False的位置替换以及如何去跳出循环。
# 二分查找的应用
class Solution:
def firstBadVersion(self, n: int) -> int:
m = 1
# if n==1:
# if isBadVersion(n) is True:
# return 1
while m <= n:
o = (m + n) // 2
# 跳出循环 否则会一直执行
if o == n:
break
# 因为 True的前一位可能是False,为了能够跳出去 不需要使得 n = o+1
if isBadVersion(o) is True:
n = o
elif isBadVersion(o) is False:
m = o + 1
return o
# 创建函数模拟接口 需要自己修改bad 懒得写传参
def isBadVersion(n:int):
bad =1
if bad == n:
return True
else:
return False
if __name__ == "__main__":
a =Solution()
print(a.firstBadVersion(n=1))