博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
153. Find Minimum in Rotated Sorted Array
阅读量:6515 次
发布时间:2019-06-24

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

题目:

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

You may assume no duplicate exists in the array.

链接: 

题解:

rotated sorted array找最小值。 跟rotated sorted array找target很类似,但更简单一些。还是用二分查找。

Time Complexity - O(logn),Space Complexity - O(1)。注意一开始的条件就可以判断nums[lo] > nums[hi],假如nums[lo] < nums[hi]的话那数组就是sorted。

public class Solution {    public int findMin(int[] nums) {        if(nums == null || nums.length == 0)            return Integer.MIN_VALUE;                int lo = 0, hi = nums.length - 1;                while(lo < hi && nums[lo] > nums[hi] ) {            int mid = lo + (hi - lo) / 2;            if(nums[mid] < nums[hi]) {                hi = mid;            } else                lo = mid + 1;        }                return nums[lo];    }}

 

二刷:

方法还是Binary Search。 注意当nums[lo] <= nums[hi]的时候,我们可以直接返回nums[lo]。 也可以把这个if 条件挪到while循环的判断语句中。二分查找的条件是,先求出mid,当nums[mid] > nums[hi]的时候,说明最小值在mid右边,我们可以更新lo = mid + 1。否则,这个最小值可能在mid及mid左边,我们更新hi = mid。

Java:

public class Solution {    public int findMin(int[] nums) {        if (nums == null || nums.length == 0) return Integer.MIN_VALUE;        int lo = 0, hi = nums.length - 1;        while (lo <= hi) {            if (nums[lo] <= nums[hi]) return nums[lo];            int mid = lo + (hi - lo) / 2;            if (nums[mid] > nums[hi]) lo = mid + 1;            else hi = mid;        }        return nums[lo];    }}

 

Update:

public class Solution {    public int findMin(int[] nums) {        if (nums == null || nums.length == 0) return Integer.MIN_VALUE;        int lo = 0, hi = nums.length - 1;        while (lo <= hi && nums[lo] > nums[hi]) {            int mid = lo + (hi - lo) / 2;            if (nums[mid] > nums[hi]) lo = mid + 1;            else hi = mid;        }        return nums[lo];    }}

 

三刷:

Java:

public class Solution {    public int findMin(int[] nums) {        if (nums == null || nums.length == 0) return Integer.MAX_VALUE;        int lo = 0, hi = nums.length - 1;        while (lo < hi && nums[lo] > nums[hi]) {            int mid = lo + (hi - lo) / 2;            if (nums[lo] <= nums[mid]) lo = mid + 1;            else hi = mid;        }        return nums[lo];    }}

 

 

Reference:

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

你可能感兴趣的文章
SpringBoot 中 @RestController 和 @Controller 的区别
查看>>
HBase数据库性能调优
查看>>
nagios plugins之 check_http ZT
查看>>
Linux解决openoffice转换PDF乱码问题(ubutun16.0.4)
查看>>
Python——3条件判断和循环
查看>>
12月1日站立会议
查看>>
Python中转变大小写的直接函数有以下方法
查看>>
问题账户需求分析
查看>>
Hive-压缩和存储
查看>>
第十三周项目1-数组大折腾(一)
查看>>
进程与线程
查看>>
杂七杂八的资源们(~持续更新)
查看>>
java IO学习
查看>>
Flask框架中特有的变量/函数及上下文
查看>>
通过委托使子窗体关闭时刷新父窗体
查看>>
编译python源代码为可执行文件(.py--->.exe)
查看>>
Linux下安装mysql5.7
查看>>
[dataTables.js error] Uncaught TypeError: myTable.row is not a function
查看>>
Object类 String StringBuffer StringBuilder
查看>>
js归并排序
查看>>