8 旋转数组的最小数字

输入一个递增排序数组的一个旋转,输出旋转数组的最小元素
例如1,2,3,4,5的一个旋转可以为3,4,5,1,2
把一个数组的最开始若干个元素搬到数组的末尾,称之为数组的旋转

输出旋转数组的最小元素

 

C++:

 1 class Solution {
 2 public:
 3     int minInOrder(vector<int> rotateArray , int left , int right) {
 4         int res = rotateArray[left] ;
 5         for (int i = left ; i <= right ; i++){
 6             if (rotateArray[i] < res)
 7                 res = rotateArray[i] ;
 8         }
 9         return res ;
10     }
11     
12     int minNumberInRotateArray(vector<int> rotateArray) {
13         int len = rotateArray.size() ;
14         if (len <= 0)
15             return 0 ;
16         int left = 0 ;
17         int right = len - 1 ;
18         int mid = left ;
19         while(rotateArray[left] >= rotateArray[right]){
20             if (right-left == 1){
21                 mid = right ;
22                 break ;
23             }
24             mid = (left+right)>>1 ;
25             if (rotateArray[left] == rotateArray[mid] && rotateArray[mid] == rotateArray[right]){
26                 return minInOrder(rotateArray,left,right) ;
27             }
28             if (rotateArray[mid] >= rotateArray[left]){
29                 left = mid ;
30             }else if (rotateArray[mid] <= rotateArray[right]){
31                 right = mid ;
32             }
33         }
34         return rotateArray[mid] ;
35     }
36 };

 

 

java:

 1 import java.util.ArrayList;
 2 public class Solution {
 3     public int minNumberInRotateArray(int [] nums) {
 4         if (nums.length == 0)
 5             return 0 ;
 6         int left = 0 ;
 7         int right = nums.length - 1 ;
 8         while(left < right){
 9             int mid = left + (right - left) / 2 ;
10             if (nums[left] == nums[mid] && nums[mid] == nums[right]){
11                 return minNumber(nums , left , right) ;
12             }else if (nums[mid] <= nums[right]){
13                 right = mid ;
14             }else{
15                 left = mid + 1 ;
16             }
17         }
18         return nums[left] ;
19     }
20     
21     private int minNumber(int [] nums , int left , int right) {
22         int res = nums[left] ;
23         for(int i = left ; i <= right ; i++){
24             if (nums[i] < res){
25                 res = nums[i] ;
26             }
27         }
28         return res ;
29     }
30 }

 

posted @ 2017-11-27 19:58  __Meng  阅读(175)  评论(0编辑  收藏  举报