leetcode之Find Minimum in Rotated Sorted Array II 问题

本文探讨了在允许重复元素的旋转排序数组中寻找最小值的问题,这是Find Minimum in Rotated Sorted Array问题的进阶版。文章通过二分查找的方法,并针对特殊情况进行了代码修正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

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判断即可。

修改代码:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值