Description: There is an integer array nums
sorted in non-decreasing order (not necessarily with distinct values).
Before being passed to your function, nums
is rotated at an unknown pivot index k
(0 <= k < nums.length
) such that the resulting array is [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]
(0-indexed). For example, [0,1,2,4,4,4,5,6,6,7]
might be rotated at pivot index 5
and become [4,5,6,6,7,0,1,2,4,4]
.
Given the array nums
after the rotation and an integer target
, return true
if target
is in nums
, or false
if it is not in nums
.
Link: 81. Search in Rotated Sorted Array II
Examples:
Example 1: Input: nums = [2,5,6,0,0,1,2], target = 0 Output: true Example 2: Input: nums = [2,5,6,0,0,1,2], target = 3 Output: false Example 3: Input: nums = [1,0,1,1,1], target = 0 Output: true
思路: 这个题目是33的加强版,添加了重复的数字,但只要返回True, False. 如果按照33的源代码就会过不了example3,因为l == mid, mid == r,就没办法进入看到0.返回False。症结就在于数组断开的地方前后是重复的数字,一部分留在开头,另一部分留在了末尾,因为只要返回是否存在,所以l从不同与r的数开始,再开始正常的搜索。
class Solution(object): def search(self, nums, target): """ :type nums: List[int] :type target: int :rtype: bool """ if not nums: return False n = len(nums) l, r = 0, n-1 while l < r and nums[l] == nums[r]: l += 1 while l <= r: mid = int((l+r)/2) if target == nums[mid]: return True if nums[l] <= nums[mid]: if target >= nums[l] and target <= nums[mid]: r = mid - 1 else: l = mid + 1 elif nums[mid] <= nums[r]: if target >= nums[mid] and target <= nums[r]: l = mid + 1 else: r = mid - 1 return False
在这篇题解博客中,将找到l不同于r放在了while里面:
class Solution(object): def search(self, nums, target): """ :type nums: List[int] :type target: int :rtype: bool """ if not nums: return False n = len(nums) l, r = 0, n-1 while l <= r: while l < r and nums[l] == nums[r]: l += 1 mid = int((l+r)/2) if target == nums[mid]: return True if nums[l] <= nums[mid]: if target >= nums[l] and target <= nums[mid]: r = mid - 1 else: l = mid + 1 elif nums[mid] <= nums[r]: if target >= nums[mid] and target <= nums[r]: l = mid + 1 else: r = mid - 1 return False
日期: 2021-04-11 96岁的励志奶奶尚且如此辛苦