二分查找模板Python实现

Posted 湾区人工智能

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找模板Python实现相关的知识,希望对你有一定的参考价值。

数据结构和算法分析是程序员面试必考内容,接下来打算刷常见面试题,顺便分享给大家。刷,刷,刷,一般中级题目刷300道,刷3遍,国内大部分公司offer随便拿。想进顶级互联网公司,要刷一些高级题目,大概30%难度题目就行,想节省时间,个人推荐报个靠谱培训班。


457. 经典二分查找问题
在一个排序数组中找一个数,返回该数出现的任意位置,如果不存在,返回-1

样例
给出数组 [122455].

对于 target = 2, 返回 1 或者 2.
对于 target = 5, 返回 4 或者 5.
对于 target = 6, 返回 -1.
挑战
O(logn) 的时间


class Solution:
    """
    @param nums: An integer array sorted in ascending order
    @param target: An integer
    @return: An integer
    """

    def findPosition(self, nums, target):
        # write your code here
        if not nums or target is None:
            return -1

        start, end = 0, len(nums) - 1
        while start + 1 < end: #注意 1:start + 1避免死循环
            mid = (end + start)//2 #注意2: start +(end - start) // 2 可以防止stack overflow
            if target < nums[mid]:
                end = mid
            elif target > nums[mid]:
                start = mid         #注意3 : = mid可以不用考虑很多细节
            else:
                return mid

        if target == nums[start]: #注意 4: 如果寻找第一个等于目标值的位置,就把return start放在开始,要不然就先return end
            return start
        if target == nums[end]:
            return end 
        return -1


458. 目标最后位置
给一个升序数组,找到target最后一次出现的位置,如果没出现过返回-1

样例
给出 [122455].

target = 2, 返回 2.

target = 5, 返回 5.

target = 6, 返回 -1.


class Solution:
    """
    @param nums: An integer array sorted in ascending order
    @param target: An integer
    @return: An integer
    """

    def lastPosition(self, nums, target):
        # write your code here
        if not nums:
            return -1
        start, end = 0, len(nums) -1
        while start + 1 < end:
            mid = (start + end) // 2
            if nums[mid] < target:
                start = mid
            elif nums[mid] > target:
                end = mid 
            else:
                start = mid
        if nums[end] == target:
            return end 
        if nums[start] == target:
            return start
        return -1

14. 二分查找
给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1

样例
在数组 [12334510] 中二分查找3,返回2

挑战
如果数组中的整数个数超过了2^32,你的算法是否会出错?




class Solution:
    """
    @param nums: An integer array sorted in ascending order
    @param target: An integer
    @return: An integer
    """

    def binarySearch(self, nums, target):
        # write your code here
        if not nums:
            return -1
        start, end = 0, len(nums) -1
        while start + 1 < end:
            mid = (start + end) // 2
            if nums[mid] < target:
                start = mid
            elif nums[mid] > target:
                end = mid 
            else:
                end = mid

        if nums[start] == target:
            return start
        if nums[end] == target:
            return end 

        return -1

总结:14题和458题分别找第一次和最后一次出现的位置,只需要调整end = mid为start = mid 并且调换位置return start 为先return end 


模板就是好用。开始不好理解,多做几遍就好了。


AI预测蛋白质空间结构



决心和意志是学好编程的关键。
生命不息,刷题不止!
程序员之路,别怂,就是干!




扫码关注的工资会翻倍


print_r('关注一下吧');
var_dump('关注一下吧');
NSLog(@"关注一下吧!")
System.out.println("关注一下吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!");
cout << "点个赞吧!" << endl;
Console.WriteLine("转发一下吧!");
fmt.Println("转发一下吧!")
Response.Write("转发一下吧!");
alert(’转发一下吧!’)



以上是关于二分查找模板Python实现的主要内容,如果未能解决你的问题,请参考以下文章

基础算法模板之二分

python实现二分叉查找

python实现二分查找

python实现二分查找与冒泡排序

十分好用的二分查找模板

整数二分浮点二分代码模板