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.

【题目分析】

一个有序的数组经过一个旋转操作,求出旋转后数组中的最小值。

【思路】

一个有序的数组经过旋转之后会发生什么呢,数据被切割成两段,然后后半段移动到了前半段,此时前半段和后半段都是一个增序序列,而且前半段中的任意一个数都比后半段中的数大。如下:

1. 遍历法

这个算法很简单,只要从前往后遍历,如果是递增的那么就继续向后,如果出现了一个断点,即在某一个位置元素比前一个元素小,那么我们就返回断点数据。这就是整个数组中最小的那个元素。如果断点靠前的话我们很快就能找到这个元素,如果断点靠后的话则需要遍历整个数组。因此我们可以设置两个指针,同时向后和向前遍历,距离断点较近的指针会率先找到最小元素。

2. 二分查找

我们可以采用二分查找来找到最小值,二分查找的时间效率更高。如何实现呢?在有序数组的二分查找算法中,我们的问题是找到我们给定的一个数值,但是在这个问题题中,我们要找到在数组中最小的那个值。我们知道旋转后数组被分成两部分,这两部分中间存在一个断点,找到了断点也就找到了最小值。当我们求中间值时,中间值可能落在断点前面或者断点后面。如果落在断点前面,那么中间值肯定比最左边的值要大,因为前半段数组中值还是递增的。如果落在的断点之后,那么中间值要比最左边的值小,因为前半段任意一个数都比后半段的要大。因此我们可以通过最左边值与中间值的大小关系来改变我们要查找的范围。如下例子:


【java代码1】

 public class Solution {
public int findMin(int[] nums) {
int len = nums.length;
if(nums[0] < nums[len-1]) return nums[0];
int i = 0, j = len - 1; while(i < j){
if(nums[i] > nums[i+1]) return nums[i+1];
if(nums[j] < nums[j-1]) return nums[j];
i++; j--;
}
return nums[i];
}
}

【java代码2】

 public class Solution {
public int findMin(int[] nums) {
int len = nums.length;
if(nums[0] < nums[len-1]) return nums[0];
int left = 0, right = len - 1; while(left < right){
int mid = left + (right - left)/2;
if(left == right - 1) return Math.min(nums[left], nums[right]);
if(nums[left] < nums[mid]) left = mid;
else right = mid;
}
return nums[left];
}
}

LeetCode OJ 153. Find Minimum in Rotated Sorted Array的更多相关文章

  1. 【LeetCode】153. Find Minimum in Rotated Sorted Array 解题报告(Python)

    [LeetCode]153. Find Minimum in Rotated Sorted Array 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode. ...

  2. LeetCode OJ 154. Find Minimum in Rotated Sorted Array II

    Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? Would ...

  3. 【LeetCode】153. Find Minimum in Rotated Sorted Array (3 solutions)

    Find Minimum in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you ...

  4. 【刷题-LeetCode】153 Find Minimum in Rotated Sorted Array

    Find Minimum in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some p ...

  5. 【leetcode】153. Find Minimum in Rotated Sorted Array

    Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example ...

  6. leetcode 153. Find Minimum in Rotated Sorted Array 、154. Find Minimum in Rotated Sorted Array II 、33. Search in Rotated Sorted Array 、81. Search in Rotated Sorted Array II 、704. Binary Search

    这4个题都是针对旋转的排序数组.其中153.154是在旋转的排序数组中找最小值,33.81是在旋转的排序数组中找一个固定的值.且153和33都是没有重复数值的数组,154.81都是针对各自问题的版本1 ...

  7. 153. Find Minimum in Rotated Sorted Array - LeetCode

    Question 153. Find Minimum in Rotated Sorted Array Solution 题目大意:给一个按增序排列的数组,其中有一段错位了[1,2,3,4,5,6]变成 ...

  8. LeetCode 新题: Find Minimum in Rotated Sorted Array 解题报告-二分法模板解法

    Find Minimum in Rotated Sorted Array Question Solution Suppose a sorted array is rotated at some piv ...

  9. 【LeetCode】154. Find Minimum in Rotated Sorted Array II 解题报告(Python)

    [LeetCode]154. Find Minimum in Rotated Sorted Array II 解题报告(Python) 标签: LeetCode 题目地址:https://leetco ...

随机推荐

  1. HDU------checksum

    Quicksum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  2. NGINX----源码阅读----init配置脚本

    /auto/init init脚本负责初始化各种目录环境变量值. 1.make文件.源文件.头文件.配置头文件路径变量初始化. NGX_MAKEFILE=$NGX_OBJS/Makefile NGX_ ...

  3. DHCP源码分析--主流程

    DHCP 服务器,客户端代码都采用了统一的事件轮询(event loop),包含了任务处理消息,定时器消息,socke收发消息等等. static struct { isc_appmethods_t ...

  4. 洞穴勘测(bzoj 2049)

    Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...

  5. js事件监听-addEventListener (w3c标准) 和 attachEvent(ie)

    研究了一个小时,没看懂这两个属性 window.onload = function(){ var oDiv = document.getElementById("J_myDiv") ...

  6. [转]Jmeter(一)-精简测试脚本

    通过jmeter代理录制脚本后,会产生大量的无用的请求,尽管在代理中已经过滤了一部分图片或者CSS.JS文件. 手动查看主要的请求:这里主要关注登陆请求,要确定有效的URL请求 删除除/Login.a ...

  7. 扔鸡蛋问题详解(Egg Dropping Puzzle)

    http://blog.csdn.net/joylnwang/article/details/6769160 经典的动态规划问题,题设是这样的:如果你有2颗鸡蛋,和一栋36层高的楼,现在你想知道在哪一 ...

  8. pro asp.net mvc5 7

    一个类可以依靠IProductRepository这一接口获取Product对象,而不必知道这些对象从哪里来,也不必知道该接口的实现类如何递交这些对象,这就是存储库模式的本质

  9. Byte Array to Hexadecimal String

    Lookup Text: 23,879.41 (20.8X faster) Sentence: 1.15 (23.9X faster) /// <summary> /// Hex stri ...

  10. Blob写入文件

    1.Spring自带方法,定义输出流就可以写入文件 final OutputStream os; os = new FileOutputStream(new File("300.zip&qu ...