Leetcode27

Search in rotated sorted array

买卖股票系列告一段落,主要是第三个 实在是难消化,鄙人实力不济,改日再战。

今天的题目是search in rotated sorted array,题目的意思是给出一个反转后的不重复有序数组(从大到小),大意如下,[0,1,2,3,4,5] 有可能被翻转为[4,5,0,1,2,3] 或者 [3,4,5,0,1,2],然后让你找出数组中指定的值。

脑子里第一个蹦出来的是,鼎鼎有名的二分算法(binary search),有进步,哈哈哈,后面一想,这该怎么二分呢,如果不翻转,这题 so easy ,翻转过后怎么办,讨论区逛了一圈,找了一个能理解的实现,如果low小于等于mid,左半边有序,否则右半边有序,然后我们判断目标数是否在有序范围内就ok了。

class Solution:
    # @param {integer[]} numss
    # @param {integer} target
    # @return {integer}
    def search(self, nums, target):
        if not nums:
            return -1

        low, high = 0, len(nums) - 1

        while low <= high:
            mid = int((low + high) / 2)
            # print(int(mid))
            if target == nums[mid]:
                return mid

            if nums[low] <= nums[mid]:

                if nums[low] <= target <= nums[mid]:
                    high = mid - 1
                else:
                    low = mid + 1
            else:
                if nums[mid] <= target <= nums[high]:
                    low = mid + 1
                else:
                    high = mid - 1

        return -1

参考资料 1. Grandyang 2. python

保持愤怒,保持热爱,守住底线。


Recent posts

Leetcode30

ElasticSearch 系列(一)

Mysql 分区表实践

Kafka 入门

Hugo 安装


Related posts

Leetcode30

Leetcode29

Leetcode28

Leetcode26

Leetcode25

Leetcode24

Leetcode23


Archives

2020 (11)
2019 (56)