描述
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.
如果循环数组里有重复元素,则根据A[m]>=A[l]是无法判断出(m,l)之间是升序的。因此,需将大于和等于分开来考虑。
只需在等于时,将重复元素跳过再比较即可。
1 int searchRotateSA(int A[], int n,int target)
2 {
3 int first = 0, last = n;
4 while (first!=last)
5 {
6 int mid = first + (last - first) / 2;
7 if (A[mid] = target)
8 {
9 return mid;
10 }
11 else if (A[first]<A[mid])//判断大小顺序
12 {
13 if (A[first] <= target&&target <= A[mid])
14 last = mid;
15 else
16 first = mid + 1;
17 }
18 else if (A[first]>A[mid])
19 {
20 if (A[first] >= target&& A[mid] <= target)
21 last = mid;
22 else
23 first = mid + 1;
24
25 }
26 else first++;
27 }
28
29 return -1;
30 }