剑指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---旋转数组的最小数字的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer 11. 旋转数组的最小数字 的详细题解

Java 剑指offer(10) 旋转数组的最小数字

《剑指offer》— JavaScript旋转数组的最小数字

剑指offer旋转数组的最小数字

java刷题-剑指offer 11 旋转数组的最小数字

剑指offer——旋转数组的最小数字