Leetcode之Search in Rotated Sorted Array II 问题

问题描述:

Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Suppose an array sorted in ascending order 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).

Write a function to determine if a given target is in the array.

The array may contain duplicates.

问题来源:Search in Rotated Sorted Array II (详细地址:https://leetcode.com/problems/search-in-rotated-sorted-array-ii/description/)

思路分析:和Search in Rotated Sorted Array 是同一个意思,只是说这里是允许重复数字出现而已,所以我们要寻找出更加普遍的解法来解决此类问题了,有点归纳演绎中的特殊到一般的意思,。我们换个角度思考下,不再找最小索引了,还是从二分查找开始,我们这次比较nums[low]和nums[mid]的大小关系,low表示左边的索引,mid表示中间的索引,high表示最右边的索引:

1.)nums[low] < nums[mid]表明啥?说明左边的数字是有序的,我们接着比较target是否位于二者之间 ,如果是的话,那么我们动的就是high指针,high = mid - 1,不在的话,我们就跨过整个左半部分,low = mid + 1;

2.)nums[low] = nums[mid],我们不敢乱下定论,那么我们就让low++,往右走一格肯定是没问题的;

3.)nums[low] > nums[mid]说明右半部分大体是有序的,我们接着判断target是否位于这二者之间,位于的话,那我们就动low指针,low = mid + 1,不在的话,我们就挪动high指针,high = mid - 1.

代码:

特殊情况处理及举例:

Leetcode之Search in Rotated Sorted Array II 问题_第1张图片

整个搜索过程(同样适用于Search in Rotated Sorted Array 中没有重复数字出现的情况):

Leetcode之Search in Rotated Sorted Array II 问题_第2张图片

你可能感兴趣的:(leetcode)