[LeetCode] Search in Rotated Sorted Array II 解题报告

本文讨论了含有重复元素的旋转有序数组搜索问题。针对允许重复元素的情况,文章提出了改进的搜索算法,并提供了具体的实现代码。

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

Follow up for “Search in Rotated Sorted Array”:
What if  duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given target is in the array.

» Solve this problem

[解题思路]
确实有影响。比如,上一题(http://codingtmd.azurewebsites.net/leetcode-search-in-rotated-sorted-array-%e8%a7%a3%e9%a2%98%e6%8a%a5%e5%91%8a/)的程序中默认如果A[m]>=A[l],那么[l,m]为递增序列的假设就不能成立了,比如如下数据
[1,3,1,1,1]
所以,要是想增强该假设,有两个选择
1. 对于每一个递增序列,遍历之,确认。
2. 找到pivot点,然后确定对应序列搜索。

不写代码了。

Update: 3/18/2013. add the implementation
重新想了一下,其实不需要这么复杂。如果A[m]>=A[l]不能确定递增,那就把它拆分成两个条件
1. A[m]>A[l]  递增
2. A[m] ==A[l] 确定不了,那就l++,往下看一步即可。

实现如下

1:       bool search(int A[], int n, int target) {  
2: int start = 0;
3: int end = n-1;
4: while(start <= end)
5: {
6: int mid = (start+end)/2;
7: if(A[mid] == target) return true;
8: if(A[start] < A[mid])
9: {
10: if(target>=A[start] && target<A[mid])
11: end = mid-1;
12: else
13: start = mid+1;
14: }
15: else if(A[start] > A[mid])
16: {
17: if(target>A[mid] && target<=A[end])
18: start = mid+1;
19: else
20: end = mid-1;
21: }
22:
else //skip duplicate one, A[start] == A[mid]
23: start++;

24: }
25: return false;
26: }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值