剑指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 }
旋转数组找出最小的数,比较简单,各种情况考虑到就行。