Python数据结构与算法51:排序与查找编程练习题2:第一个坏版本

:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性。

本文阅读时间约为4分钟

排序与查找编程练习题2:第一个坏版本

现在有同一个产品的N个版本,编号为从1至N的整数;其中从某个版本之后所有版本均已损坏。现给定一个函数isBadVersion,输入数字N可判断该版本是否损坏(若损坏将输出True);请找出第一个损坏的版本。

注:有时isBadVersion函数运行速度很慢,请注意优化查找方式。

输入格式:

两行。

第一行为整数,为产品号总数N。

第二行为给定的判断函数,使用有效的Python表达式给出,可使用eval读取。

输出格式:

一行数字,表示第一个损坏的版本。

输入样例:

50
lambda n:n>=30

输出样例:

30

示例代码模板:

N = int(input())
isBadVersion = eval(input())
 
def firstBadVersion(n):
    # code here
    pass
 
print(firstBadVersion(N))

解答:本题有两种查找方法:顺序查找法及二分查找法。顺序查找法比较简单粗暴,直接顺序查找即可,我们用效率更高的二分法来处理。
参考代码如下:

# 排序与查找编程练习题2:第一个坏版本。

N = int(input())
isBadVersion = eval(input())

def firstBadVersion(n):
    low = 1
    high = n
    while low <= high:
        mid = (low + high) // 2  # 设立中值。                
        if isBadVersion(mid):
            high = mid - 1
        else:
            low = mid + 1
    return low

print(firstBadVersion(N))

To be continued.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容