剑指offer---旋转数组的最小数字
Posted iwangzhengchao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer---旋转数组的最小数字相关的知识,希望对你有一定的参考价值。
题目:旋转数组的最小数字
要求:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
1 class Solution { 2 public: 3 int minNumberInRotateArray(vector<int> rotateArray) { 4 5 } 6 };
解题代码:
1 class Solution { 2 public: 3 int minNumberInRotateArray(vector<int> rotateArray) { 4 if(rotateArray.size() == 0) 5 return 0; 6 int left = 0; 7 int right = rotateArray.size()-1; 8 int pMid = (left + right) / 2; 9 if(rotateArray[left] < rotateArray[right]) 10 return rotateArray[0]; 11 else{ 12 while(right-left != 1){ 13 if(rotateArray[left] == rotateArray[right] && rotateArray[left] == rotateArray[pMid]) 14 return MinInOrder(rotateArray, left, right); 15 else{ 16 if(rotateArray[pMid] >= rotateArray[left]){ 17 left = pMid; 18 } 19 else{ 20 right = pMid; 21 } 22 pMid = (left + right) / 2; 23 } 24 } 25 return rotateArray[right]; 26 } 27 } 28 29 private: 30 int MinInOrder(vector<int> array, int left, int right){ 31 int res = array[left]; 32 for(int i=left+1; i<=right; i++){ 33 if(array[i] < res) 34 res = array[i]; 35 } 36 return res; 37 } 38 };
以上是关于剑指offer---旋转数组的最小数字的主要内容,如果未能解决你的问题,请参考以下文章