剑指offer系列3:旋转数组的最小数字

第8题

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 
 5 class Solution {
 6 public:
 7     int minNumberInRotateArray(vector<int> rotateArray) {
 8         if (rotateArray.empty() == true)
 9         {
10             return 0;
11         }
12         int low = 0,mid=0,min=0;
13         int high = rotateArray.size()-1;
14         if (rotateArray[low] < rotateArray[high])
15         {
16             return rotateArray[low];
17         }
18         if (rotateArray[low] == rotateArray[high])
19         {
20             min = rotateArray[low];
21             for (int i = 0; i < high - 1; i++)
22             {
23                 if (rotateArray[i] < min)
24                 {
25                     min = rotateArray[i];
26                 }
27             }
28             return min;
29         }
30         while (low + 1 != high)
31         {
32             mid = low+(high-low) / 2;
33             if (rotateArray[low] <= rotateArray[mid])
34             {
35                 low = mid;
36             }
37             else
38             {
39                 high = mid;
40             }
41         }
42         return (rotateArray[low] > rotateArray[high]) ? rotateArray[high] : rotateArray[low];
43     }
44 };
45 int main()
46 {
47     vector<int> test = {1,0,1,1,1 };
48     Solution so;
49     cout << so.minNumberInRotateArray(test) << endl;
50     return 0;
51 }

旋转数组找出最小的数,比较简单,各种情况考虑到就行。

原文地址:https://www.cnblogs.com/neverland0718/p/10882059.html