python二分查找问题set

leetcode34 Search for a Range

class Solution:
    def searchRange(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        if not nums:
            return [-1, -1]

        def search(n):
            st = 0
            ed = len(nums) - 1
            while st <= ed:
                mid = (st + ed) // 2
                if nums[mid] == n:
                    if mid-1 >= 0 and nums[mid - 1] == n:
                        mid -= 1
                    return mid
                if nums[mid] < n:
                    st = mid + 1
                else:
                    ed = mid - 1

            return st

        right = left = search(target)
        if left>len(nums)-1:
            return [-1, -1]
        try:
            if nums[left] != target:
                return [-1, -1]
        except:
            pass
        try:
            while left-1 >= 0 and nums[left - 1] == target:
                left -= 1
            while nums[right + 1] == target:
                right += 1
        except:
            pass

        return [left, right]
时间: 2024-10-12 17:04:49

python二分查找问题set的相关文章

python二分查找模块bisect

bisect模块用于二分查找,非常方便. Bisect模块提供的函数有: (1)查找 bisect.bisect_left(a,x, lo=0, hi=len(a)) : 查找在有序列表a中插入x的index.lo和hi用于指定列表的区间,默认是使用整个列表. bisect.bisect_right(a,x, lo=0, hi=len(a)) bisect.bisect(a, x,lo=0, hi=len(a)) 这2个和bisect_left类似,但如果x已经存在,在其右边插入. (2)插入

Python —— 二分查找

二分查找: l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] def func(l,aim,start= 0,end=None): if end == None:end = len(l) - 1 if start <= end: mid = (end + start) // 2 #12 18 if l[mid] < aim: return func(l,aim,start = mid +

两种方法实现Python二分查找算法

一. arr=[1,3,6,9,10,20,30] def findnumber(l,h,number): mid=(l+h)//2 if arr[mid]==number: print("找到了"+str(mid)) elif arr[mid]<number: l = mid return findnumber(mid+1,h,number) elif arr[mid]>number: h = mid return findnumber(0,mid-1,number) e

Python 二分查找算法

一.解释 二分法:可以理解为折半查找法,每一次都是基于上一次的折半查找 二.实例 l = [1,2,5,7,10,31,44,47,56,99,102,130,240] #l为查找的列表 #num要查找的数 def binary_search(l,num): print(l) #[10, 31] if len(l) > 1: mid_index=len(l)//2 #1 if num > l[mid_index]: #in the right l=l[mid_index:] #l=[31] b

Python 二分查找

def search(data_set,find_num):    mid = len(data_set) /2    print mid    if len(data_set) == 1:       if data_set[mid] == find_num:        print ('End start: ',find_num)        return        else:        print ('NO NO NO:',find_num)        return   

二分查找&mdash;&mdash;Python实现

一.排序思想 二分(折半)查找思想请参见:https://www.cnblogs.com/luomeng/p/10585291.html 二.python实现 def binarySearchDemo(arr, key): """ python二分查找非递归方式 :param arr:待排序列,有序集合 :param key:带查找元素 """ low = 0 high = len(arr) - 1 while low <= high: m

python算法之二分查找

说明:大部分代码是在网上找到的,好几个代码思路总结出来的 通常写算法,习惯用C语言写,显得思路清晰.可是假设一旦把思路确定下来,并且又不想打草稿.想高速写下来看看效果,还是python写的比較快.也看个人爱好.实习的时候有个同事对于python的缩进来控制代码块各种喷....他认为还是用大括号合适...怎么说呢,适合自己的才是最好的.我个人的毛病就是,写了几天C,到要转到python的时候,代码中依旧有C的影子..比方大括号问题,比方忘记在while或这for.if.else等后面加":&quo

python函数:递归函数及二分查找算法

本文和大家分享的主要是python的递归函数及二分查找算法相关内容,一起来看看吧,希望对大家学习python有所帮助. 一.递归的定义 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? """ print(s) story() story() 老和尚讲故事 递归的定义 -- 在一个函数里再调用这个函数本身.这种魔性的使用函数的方式就叫做 递归 . 递归的最大深度:997 1.python递归最大层

Python 实现二分查找算法

最近在学习python,由于在面试中,二分查找算法面试率极高,所以使用python做了一个实现. def search1(sequence, number): lower = 0 upper = len(sequence) - 1 while lower <= upper: mid = (lower + upper) // 2 if number > sequence[mid]: lower = mid + 1 elif number < sequence[mid]: upper = m