Search in Rotated Sorted Array

Search in Rotated Sorted Array

 

Suppose a sorted array 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).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

 

由于是有序数组被旋转了,因此数组的性质也就发生了变化

要进行二分查找我们需要的数,进行如下步骤:

1. 取中间的数,比较 a[mid] 和 a[low],若a[low] < a[mid],说明旋转点在mid右边,则有a[low...mid]是有序数组,若target在a[low]与a[mid]之间,则在low和mid-1中继续找,否则在mid+1和high之间找

2. 若a[low] > a[mid],说明旋转点在mid左边,那么a[mid...high]是有序数组,如果target在a[mid]和a[high]之间,则在mid+1和high之间继续找,否则在low和mid-1继续找

代码如下:

 1 class Solution {
 2 public:
 3     int search(int A[], int n, int target) {
 4         int low = 0, high = n-1;
 5         while( low <= high ) {
 6             int mid = low + (high-low) / 2;
 7             if( target == A[mid] ) return mid;
 8             if( A[low] < A[mid] ) { //若旋转点在右边,则A[low...mid]是有序数组
 9                 if( A[low] <= target && target < A[mid] )
10                     high = mid - 1;
11                 else
12                     low = mid + 1;
13             }
14             else if( A[low] > A[mid] ) {    //若旋转点在左边,则A[mid...high]是有序数组
15                 if( A[mid] < target && target <= A[high] )
16                     low = mid + 1;
17                 else
18                     high = mid - 1;
19             }
20             else ++low; //low和mid指向同一个位置时
21         }
22         return -1;
23     }
24 };

Search in Rotated Sorted Array II

 

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.

 

直接修改上题代码。。。。AC......

posted on 2014-09-03 16:32  bug睡的略爽  阅读(121)  评论(0编辑  收藏  举报

导航