35 leetcode - Search in Rotated Sorted Array

版本1,未整理,最直观

#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Search in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
'''
#注意有序数组里面没有重复元素
class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        length = len(nums)
        if length == 0:
            return -1

        left,right = 0,length - 1

        while left <= right:
            mid = (left + right)/2
            if nums[mid] == target:
                return mid

            if nums[left] > nums[right]:#此时nums处于翻转状态
                if nums[mid] > nums[right]:#mid在较大的有序段中
                    if nums[mid] < target: #target大于nums[mid],因为处在较大的有序段中,左侧的肯定比nums[mid]都小,所以只能往右找.
                        left = mid + 1
                    else:                  #target小于nums[mid]
                        if nums[left] == target:
                            return left
                        if nums[left] > target:#因为处在较大的有序段中,如果最小的元素都比target大的话,只能往右找
                            left = mid + 1
                        else:
                            right = mid - 1
                else:  #mid处于较小的一侧,同理可得以下
                    if nums[mid] > target:
                        right = mid - 1
                    else:
                        if nums[left] == target:
                            return left
                        if nums[left] > target:
                            left = mid + 1
                        else:
                            right = mid - 1

            else:#未处于翻转
                if nums[mid] > target:
                    right = mid - 1
                else:
                    left = mid + 1

        return -1 

if __name__ == "__main__":
    s = Solution()
    print s.search([4,5,6,7,8,1,2,3],8)

版本2,只是整理了版本1的代码,但是不如版本1好理解

#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Search in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
'''
#注意有序数组里面没有重复元素
class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        length = len(nums)
        if length == 0:
            return -1

        left,right = 0,length - 1

        while left <= right:
            mid = (left + right)/2
            if nums[mid] == target:
                return mid

            if nums[left] > nums[right]:#此时nums处于翻转状态
                if nums[mid] > nums[right] and nums[mid] < target:
                    left = mid + 1
                elif nums[mid] < nums[right] and nums[mid] > target:
                    right = mid - 1
                else:              
                    if nums[left] == target:
                        return left
                    if nums[left] > target:
                        left = mid + 1
                    else:
                        right = mid - 1
            else:#未处于翻转
                if nums[mid] > target:
                    right = mid - 1
                else:
                    left = mid + 1

        return -1 

if __name__ == "__main__":
    s = Solution()
    print s.search([4,5,6,7,8,1,2,3],8)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值