leetcode 之Search in Rotated Sorted Array(四)

描述

    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 }

 

     

posted @ 2016-05-01 21:34  牧马人夏峥  阅读(132)  评论(0)    收藏  举报