博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lintcode:寻找旋转排序数组中的最小值 II
阅读量:7101 次
发布时间:2019-06-28

本文共 1724 字,大约阅读时间需要 5 分钟。

假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。

你需要找到其中最小的元素。

数组中可能存在重复的元素。

解题

暴力直接线性查找

或者,线性找到第一个开始降序的位置对应的数

应该考虑二分法

递归 + 二分

public class Solution {    /**     * @param num: a rotated sorted array     * @return: the minimum number in the array     */    public int findMin(int[] num) {        // write your code here        if( num == null || num.length == 0)            return 0;        if(num.length == 1)            return num[0];        return findMin(num,0,num.length - 1);            }    public int findMin(int[] num,int left,int right){        if(left == right)            return num[left];        if(right == left + 1)            return Math.min(num[left],num[right]);        int mid = (left + right)/2;        if( num[right] > num[left])            return num[left];        else if( num[right] == num [left])            return findMin(num,left + 1,right);        else if(num[mid] >= num[left])            return findMin(num,mid,right);        else             return findMin(num,left,mid);    }}
Java Code

 

二分

public class Solution {    /**     * @param num: a rotated sorted array     * @return: the minimum number in the array     */    public int findMin(int[] num) {        // write your code here        if( num == null || num.length == 0)            return 0;        if(num.length == 1)            return num[0];        int low = 0;        int high = num.length -1;        int mid = low;        while(low < high){            mid = (low + high)/2;            if(num[mid] >  num[high]){                low = mid + 1;            }else if( num[mid] < num[high]){                high = mid ;            }else{                high--;            }        }        return num[low];            } }
Java Code

 

转载地址:http://gakhl.baihongyu.com/

你可能感兴趣的文章
新书《iOS8 Swift编程指南》货架
查看>>
Python与rrdtool的结合模块
查看>>
写贤治学生:关键是要管理好自己的时间
查看>>
iOS 自定义步骤进度条
查看>>
R: NULL, NA, and NaN
查看>>
线程池的设计和应用
查看>>
Hadoop - Ambari集群管理剖析
查看>>
使用装饰器模式动态设置Drawable的ColorFilter
查看>>
用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面
查看>>
IntelliJ IDEA中怎样使用JUnit4
查看>>
php学习第一天-勤劳致富
查看>>
2016新年快乐
查看>>
ubuntu如何安装 adobe flash player或adobe插件
查看>>
Docker简明教程(转)
查看>>
【JDK源码分析】String的存储区与不可变性(转)
查看>>
用java解析在OpenStreetMap上下载的地图数据
查看>>
OpenStreetMap地图数据介绍(转)
查看>>
Raft论文的一些问题
查看>>
Window平台搭建Redis分布式缓存集群 (一)server搭建及性能測试
查看>>
SQL变量与全局变量
查看>>