6.旋转数组的最小数字——剑指offer
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
//直接遍历,找到最小值为止 class Solution { public: int minNumberInRotateArray(vector<int> rotateArray) { int length = rotateArray.size(); if(length == 0) return 0; int index = length -1; for(int i = 0; i < length - 1; ++i){ if(rotateArray[i] <= rotateArray[i+1]) continue; else index = i; } if(index == length -1) return rotateArray[0]; else return rotateArray[index + 1]; } };
1 //二分查找,利用数组的有序性 2 class Solution { 3 public: 4 int minNumberInRotateArray(vector<int> rotateArray) { 5 int length = rotateArray.size(); 6 if(length == 0) 7 return 0; 8 int pre = 0; 9 int last = length - 1; 10 while(pre < last) 11 { 12 int mid = (pre + last) / 2; 13 if(rotateArray[mid] > rotateArray[last]) 14 { 15 pre = mid + 1; 16 } 17 else if(rotateArray[mid] < rotateArray[last]){ 18 last = mid; 19 } 20 else{ 21 last = last - 1; 22 } 23 } 24 return rotateArray[pre]; 25 } 26 };