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 }
  • 相关阅读:
    OpenJudge 3765(最大权闭合图,最小割
    多校8-1010 HDU5389 (dp
    570D Codeforces Round #316 (Div. 2) D(dfs序,时间戳,二分
    CodeForces
    hiho一下!
    HDU 4123(树上任意点到其他点的最远距离,rmq
    Oracle创建索引;查询索引
    HBase启动和停止命令
    flink dom4j冲突异常
    flink checkpoint状态储存三种方式选择
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/7905808.html
Copyright © 2011-2022 走看看