代码改变世界

[LeetCode] 33. Search in Rotated Sorted Array

2017-04-14 11:29  amadis  阅读(114)  评论(0编辑  收藏  举报

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).

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 // better one from discuss 
 2 class Solution {
 3 public:
 4     int search(vector<int>& nums, int target) {
 5         int ret = -1;
 6         int start = 0;
 7         int mid;
 8         int end = nums.size() - 1;
 9         
10         while (start <= end){
11             mid = (start + end) / 2;
12             if (target == nums[mid]){
13                 return mid;
14             }
15             
16             if (nums[start] <= nums[mid]){
17                 if ((nums[start] <= target) && (target < nums[mid])){
18                     end = mid - 1;
19                 }else{
20                     start = mid + 1;
21                 }
22             }else{// if (nums[mid] <= nums[end]){
23                 if ((nums[mid] < target) && (target <= nums[end])){
24                     start = mid + 1;
25                 }else{
26                     end = mid - 1;
27                 }
28             }
29         }
30         
31         return ret;
32     }
33 };