lintcode:二分查找

題目

class Solution:
    # @param nums: The integer array
    # @param target: Target number to find
    # @return the first position of target in nums, position start from 0 
    def binarySearch(self, nums, target):
        # O(n):
        i = 0
        while nums[i] < target and i < len(nums):
            if nums[i] == target:
                return i
            i += 1
        if nums[i] == target:
            return i
        return -1

直接返回mid的:

class Solution:
    # @param nums: The integer array
    # @param target: Target number to find
    # @return the first position of target in nums, position start from 0 
    def binarySearch(self, nums, target):       
        # O(log): 該算法不能AC
        start, end = 0, len(nums) - 1
        while start <= end:
            mid = (start + end) / 2
            if nums[mid] == target:
                return mid
            elif nums[mid] > target:
                end = mid - 1
            else:
                 start = mid + 1
         return -1

返回right:

class Solution:
    # @param nums: The integer array
    # @param target: Target number to find
    # @return the first position of target in nums, position start from 0 
    def binarySearch(self, nums, target):
        left, right = 0, len(nums) - 1
        while left < right:
            mid = (right - left) / 2 + left
            if target > nums[mid]:
                left = mid + 1
            elif target < nums[mid]:
                right = mid - 1
            else:
                right = mid
        if nums[right] == target:
            return right
        return -1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章