码迷,mamicode.com
首页 > 其他好文 > 详细

search in rotated sorted array

时间:2017-04-24 12:03:31      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:bsp   order   log   which   exce   cal   simple   tab   course   

descripte problem:

  there is an array,at the first it is sorted,but for som reason, it was rotated at some pivot unknown to you beforehand.then you should find the target num in the array,and return the index

i.e:

[4,5,6,1,2,3]

[1]

return 

4

solution:

  you should treat the array as two aescend array,which named part1,part2.Then you can use the binary search to find the low ,high and middle.

  first, calculate the middle = (low +high)/2

  second,if nums[middle] == target, then middle is the index which we find ;else judge which part is the middle belonged to, part1 or part2

  third, if the middle belong to part1, you should know that whether nums[low] <= target <= nums[middle], if ture it turns out that target must exits between nums[low] and nums[middle],so you just need make high = middele -1;if it is false, the target is impossible to exits between nums[low] and nums[middle], so you just need make low = middle +1.

  fourth, if the middle belong to part2, you have to find if nums[middle] <= target <= nums[high], if ture it turns  out that target must exits between nums[middle] and nums[high], so you just need make low = middle +1

;if false, you should make high = middle - 1

there is my python code

class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        low = 0
        high = len(nums)-1
        while low<=high:
            middle = (low+high)/2
            if nums[middle]==target:
                return middle
            if nums[middle] >= nums[low]:
                if target < nums[middle] and target >= nums[low]:
                    high = middle - 1
                else:
                    low = middle + 1
            else:
                if target <= nums[high] and target >= nums[middle]:
                    low = middle + 1
                else:
                    high = middle - 1
            
        return -1
            

 

of course, you can just use the order search, but it has be proved that the exceed time is not stable

there is the simple solution

class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        for i in range(len(nums)):
            if nums[i] == target:
                return i
        return -1

 

search in rotated sorted array

标签:bsp   order   log   which   exce   cal   simple   tab   course   

原文地址:http://www.cnblogs.com/whatyouknow123/p/6755388.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!