zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    HDU 1022 Train Problem I
    HDU 1702 ACboy needs your help again!
    HDU 1294 Rooted Trees Problem
    HDU 1027 Ignatius and the Princess II
    HDU 3398 String
    HDU 1709 The Balance
    HDU 2152 Fruit
    HDU 1398 Square Coins
    HDU 3571 N-dimensional Sphere
    HDU 2451 Simple Addition Expression
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/7905808.html
Copyright © 2011-2022 走看看