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
保持愤怒,保持热爱,守住底线。