leetcode33 Search in Rotated Sorted Array

思路:

有意思的一道题。是一般的二分查找的一种变体,需要在二分过程中对各种情况进行分类讨论。

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 class Solution
 5 {
 6 public:
 7     int search(vector<int>& nums, int target)
 8     {
 9         int n = nums.size();
10         int l = 0, r = n - 1, ans = -1;
11         while (l <= r)
12         {
13             int m = l + r >> 1;
14             if (nums[l] > nums[m])
15             {
16                 if (target == nums[m]) { ans = m; break; }
17                 else if (target > nums[m])
18                 {
19                     if (target > nums[r]) r = m - 1;
20                     else l = m + 1;
21                 }
22                 else r = m - 1;
23             }
24             else
25             {
26                 if (target == nums[m]) { ans = m; break; }
27                 else if (target > nums[m]) l = m + 1;
28                 else
29                 {
30                     if (target >= nums[l]) r = m - 1;
31                     else l = m + 1;
32                 }
33             }
34         }
35         return ans;
36     }
37 };
38 
39 int main()
40 {
41     int a[] = {4, 5, 6, 7, 0, 1, 2};
42     int n = sizeof(a) / sizeof(int);
43     int target = 5;
44     vector<int> v(a, a + n);
45     cout << Solution().search(v, target) << endl;
46     return 0;
47 }
原文地址:https://www.cnblogs.com/wangyiming/p/11161425.html