C++ 中旋转排序数组 II 的搜索
假设我们有一个按升序排序的数组。该数组在某个未知的枢轴点旋转。例如,如果数组像 [0,0,1,2,2,5,6],它可能会变成 [2,5,6,0,0,1,2]。我们有一个目标值需要搜索。如果该值在数组中找到,则返回 true,否则返回 false。所以如果数组像 [2,5,6,0,0,1,2],目标是 0,则输出将是 0
让我们看看步骤 -
low := 0 且 high := 数组大小
当 low < high 时
mid := low + (high - low)/2
如果 nums[mid] = target,则返回 true
如果 nums[low] = nums[mid] 且 nums[high - 1] = nums[mid],则
将 low 增加 1 并将 high 减少 1,并继续进行下一轮迭代
如果 nums[low] <= nums[mid],则
如果 target >= nums[low] 且 target < nums[mid],则 high := mid,否则 low := mid + 1
否则
如果 target <= nums[high - 1] 且 target > nums[mid],则 low := mid + 1,否则 high := mid
返回 false
示例
让我们看看下面的实现以更好地理解 -
class Solution(object): def search(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ low = 0 high = len(nums) while low<high: mid = low + (high-low)//2 print(mid) if nums[mid] == target: return True if nums[low] == nums[mid] and nums[high-1] == nums[mid]: low +=1 high -=1 continue if nums[low]<=nums[mid]: if target >=nums[low] and target <nums[mid]: high = mid else: low = mid+1 else: if target<=nums[high-1] and target>nums[mid]: low = mid+1 else: high = mid return False
输入
[2,5,6,0,0,1,2] 0
输出
true
广告