zoukankan      html  css  js  c++  java
  • 牛客题霸NC71旋转数组的最小数字Java题解

    牛客题霸NC71旋转数组的最小数字Java题解

    https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba?tpId=117&&tqId=34993&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking

    方法:二分法
    解题思路: ①当 array[mid] > array[j] 时: mid一定在左排序数组中,即旋转点x一定在[mid+1,j]闭区间内,因此执行i=mid+1
    ②当 array[mid] < array[j] 时:mid 一定在右排序数组中,即旋转点x一定在[i,mid]闭区间内,因此执行j=mid
    ③当 array[mid] = array[j] 时:无法判断 mid 在哪个排序数组中,可直接放弃二分查找,而使用线性查找替代。

    import java.util.ArrayList;
    public class Solution {
        public int minNumberInRotateArray(int [] array) {
            int i = 0;
            int j = array.length-1;
     
            while(i<j){   
                int mid = (i+j)/2;
                if(array[mid]>array[j]){   //当 array[mid] > array[j] 时: mid一定在左排序数组中,即旋转点x一定在[mid+1,j]闭区间内,因此执行i=mid+1    
                    i=mid+1;
                }else if(array[mid]<array[j]){ //当 array[mid] < array[j] 时:mid 一定在右排序数组中,即旋转点x一定在[i,mid]闭区间内,因此执行j=mid
                    j=mid
                }else{                         //当 array[mid] = array[j] 时:无法判断 mid 在哪个排序数组中,可直接放弃二分查找,而使用线性查找替代
                    int res = array[i];
                    for(int k=i;k<=j;k++){
                        if(array[k]<res){
                            res = array[k];
                        }
                    }
                    return res;
                }
            }
            return array[i];
        }
    }
  • 相关阅读:
    ADO.NET调用存储过程
    存储过程
    web Servise(服务)
    ADO.NET连接池
    ADO.NET
    常用语法2
    常用语法
    修改pip源为国内网站
    模块
    random模块
  • 原文地址:https://www.cnblogs.com/yunfeiyang2020/p/14045427.html
Copyright © 2011-2022 走看看