leetcode之Find Minimum in Rotated Sorted Array II 问题
问题描述:
Follow up for "Find Minimum 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
).
Find the minimum element.
The array may contain duplicates.
问题来源:Find Minimum in Rotated Sorted Array II (详细地址:https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/#/description)
思路:其实这道题是从Find Minimum in Rotated Sorted Array 问题进一步演化过来的,二分查找已经在前文当中介绍了,如果你对这方面还是不熟悉,可以参见Find Minimum in Rotated Sorted Array解答 。在这只介绍一下不同的地方:当nums[mid] == nums[high]的时候,我们不能确定最小值是在左边还是在右边,那我们就把high指针往左边移移肯定是没错的,因为求的是最小值嘛,移大的肯定是没问题的。
代码:
其实表面一看,好像是对的,其实还有有点不对的地方的。但是这道题的返回的答案是对的,问题出在哪里呢?
其实返回的索引有时候是不对的,参考下面的两个例子:
1)1 1 1 1 1 1 1 1 2 1 1 总共11个数,索引从0 ~ 10,正确结果的索引应该是9,而折半查找分析出来的结果是0;
2)2 2 2 2 2 2 2 2 1 2 2 这道题返回的是最小值1,索引当然就只有8了;
为什么会出现上面的索引不对的这种情况呢?
因为当你的指针high--的时候,直接就跳过了mid所指向的值。接着分析第一个例子,当high指向2的时候,直接就跳到前半部分去了,所以返回的索引值是不对的。其实只需要稍微修改一下代码就可以避免发生这种错误了,加一个if判断即可。
修改代码: