zoukankan      html  css  js  c++  java
  • 二分

    一、在数组中查找局部最小的数

     

    思路:二分查找

    代码:

    def getLessIndex(arr):
        if not arr:
            return -1
        n = len(arr)
        if n == 1 or arr[0] < arr[1] :
            return 0
        if arr[n-1] < arr[n-2]:
            return n - 1
        left = 1
        right = n - 2
        while left < right:
            mid = (left + right) // 2
            if arr[mid] > arr[mid - 1]:
                right = mid - 1
            elif arr[mid] > arr[mid + 1]:
                left = mid + 1
            else:
                return mid
        return left #当left = right结束时,返回当前值,即局部最小值
    arr = [3,1,5,4,7,8]
    getLessIndex(arr)

     二、题目:在循环有序数组中查找某个数

    循环有序数组:

    指的是,将一个有序数组循环左/右移动若干距离之后变成的数组。如,[1,2,3,4,5]循环右移3位,就成为[4,5,1,2,3]。该数组的特点是,其中包含着一个转折点。转折点左右两侧的子数组都是有序的,并且左侧的子数组整体都比右侧的子数组大。

    在一个循环有序数组中查找某个数

    思路:

      

    代码:

    #coding=utf-8
    def findNum(arr,N):
        if len(arr)< 1:
               return -1
        left , right = 0 , len(arr) - 1
        while left < right:
            mid = (left+right) // 2
            if arr[mid] == N:
                return mid
            if arr[left] < arr[mid]:
                if arr[left] <= N and arr[mid] > N:
                    right = mid
                else:
                    left = mid
            else:
                if arr[mid] < N and arr[right] >= N:
                    left = mid
                else:
                    right = mid
        return -1
    if __name__ == '__main__':
        arr = [4,5,6,7,0,1,2]
        N = 5
        print(findNum(arr,N))
               
               

     

  • 相关阅读:
    java 8 , merge()
    2026 11 12
    koda java
    Linq实现between拓展
    WinForm开发----关闭window窗体最好的办法
    ASP.NET中指定自定义HTTP响应标头
    使用Zxing.net实现asp.net mvc二维码功能
    实现asp.net mvc页面二级缓存,提高访问性能
    队列应用
    Ubuntu 12.04使用uginx+fastcgi-mono-server2部署asp.net 网站
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/10525116.html
Copyright © 2011-2022 走看看