美文网首页
第五讲 二分搜索(2)——练习1

第五讲 二分搜索(2)——练习1

作者: 天涯海角之路 | 来源:发表于2020-06-02 17:36 被阅读0次

练习1:在旋转有序数列中查找最小值

题目要求

假设有一个升序排列的数列在某个未知节点处被前后调换,请找到数列中的最小值。

分析

旋转有序数列是数据的先验结构,对于这个结构特性,设计针对性的搜索算法。

代码1——我的

def f(num_list):
    if len(num_list) == 0:
        return -1

    l, h = 0, len(num_list)-1
    while l+1 < h:
        mid = (l+h) // 2
        if num_list[mid] >= num_list[l]:
            l = mid
        else:
            h = mid

    if num_list[l] >= num_list[h]:
        return num_list[h]
    else:
        return num_list[l]

代码2——官方的

def search(alist):
    if len(alist) == 0:
        return -1

    l, r = 0, len(alist)-1
    while l+1 < h:
        if alist[l] < alist[r]:
            return alist[l]
        mid = l + (r - l) //2
        if alist[mid] >= alist[l]:
            l = mid +1
        else:
            r = mid
    return alist[l] if alist[l] < alist[r] else alist[r]

代码对比

  1. 官方代码中循环内部多了if alist[l] <alist[r]: return alist[l],以捕获运气好的情况,以直接得到答案
  2. l + (r - l) //2代替(l + r) // 2,这样可以预防数值过大所导致的溢出
  3. 最后的return比较简洁,一行

相关文章

  • 第五讲 二分搜索(2)——练习1

    练习1:在旋转有序数列中查找最小值 题目要求 假设有一个升序排列的数列在某个未知节点处被前后调换,请找到数列中的最...

  • 第五讲 二分搜索(1)——模板

    模板 模板分为五步: 空列表判断 循环状态初始化 循环的执行条件(当碰到边界时跳出循环) 循环内部情况 边界情况

  • Algorithm进阶计划 -- 二分搜索

    二分搜索二分搜索模板二分搜索运用 1. 二分搜索模板 二分搜索(二分查找)也称折半查找(Binary Search...

  • 递归算法复杂性分析-主定理法

    举例:1)例1:二叉树的遍历。 2)例1:归并排序。 例2:二分搜索(折半搜索)。 3)

  • 用java实现二分搜索<算法分析>

    实验目的: 1、复习java编程;2、掌握二分搜索技术的基本原理;3、掌握使用java程序进行二分搜索的方法。 实...

  • 二分搜索(Binary_Search)

    1. 二分搜索是什么? 二分搜索(英语:binary search),也叫折半搜索(英语:half-interva...

  • 二叉查找树最难的一个操作——删除

    之前的文章我们讲了二分搜索树插入、查找、深度优先遍历,以及广度优先遍历,今天我们讲二分搜索树中最难的部分——删除。...

  • 算法-二分搜索算法

    算法:二分搜索算法(折半查找算法)时间复杂度: 二分搜索算法概述 二分搜索算法伪代码 二分搜索算法实现 二分搜索算...

  • 面试题

    面试题总结 1、算法问题,链表反转、二分搜索、深度搜索、广度搜索、常见算法 时间复杂度(大 O 表示) 2、OC相...

  • 第五讲课程巩固

    一、本讲作业: 1.完成第五讲练习册 2.默写古诗(写在练习册空白处) (1)《将进酒》默写到“天生我材必有用,千...

网友评论

      本文标题:第五讲 二分搜索(2)——练习1

      本文链接:https://www.haomeiwen.com/subject/bmauzhtx.html