面试题8 旋转数组的最小数字
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
1 class Solution { 2 public: 3 int findmin(vector<int> rotateArray) { 4 int min = rotateArray[0]; 5 for (int i = 1; i < rotateArray.size(); i++) { 6 if (min > rotateArray[i]) 7 min = rotateArray[i]; 8 } 9 return min; 10 } 11 12 int minNumberInRotateArray(vector<int> rotateArray) { 13 if (rotateArray.size() == 0) 14 return 0; 15 int i = 0, j = rotateArray.size() - 1, mid = i; 16 while (rotateArray[j] <= rotateArray[i]) { 17 if (j - i == 1){ 18 mid = j; 19 break; 20 } 21 mid = (i + j) / 2; 22 if (rotateArray[i] == rotateArray[j] && rotateArray[i] == rotateArray[mid]) 23 return findmin(rotateArray); 24 if (rotateArray[mid] >= rotateArray[i]) 25 i = mid; 26 else if (rotateArray[mid] <= rotateArray[j]) 27 j = mid; 28 } 29 return rotateArray[mid]; 30 } 31 };