码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-25 10:55:57      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:array   vector   class   com   旋转数组   views   mini   min   int   

题目:旋转数组的最小数字

要求:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{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---旋转数组的最小数字

标签:array   vector   class   com   旋转数组   views   mini   min   int   

原文地址:https://www.cnblogs.com/iwangzhengchao/p/9847826.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!