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. Webupload + MVC 之上传下载

    最近工作中用到了 MVC 的上传及下载 , 写下感受 本项目中用到的是百度的webuploader <!--引入Jquery--> <script src="~/Conte ...

  2. [UWP小白日记-3]记账项目-1

    学了一段时间的UWP,来个项目试试手. 本来是想边做边学MVVMLight的结果感觉MVVM对于萌新来说太高难,以后再把这个项目改造成MVVMLight框架的项目. 下面进入正题. 中间那快空白打算放 ...

  3. java 缓存ehcache的使用(使用方式一)

    实体要序列化 resource文件夹下建立 ehcache.xml <?xml version="1.0" encoding="UTF-8"?> & ...

  4. supervisor启动流程

    Supervisor结构: 单点结构如图: 1. 初始化时,启动进程Supervisor,根据 Nimbus分配的任务情况触发启动/停用Worker Jvm进程! 2. 每个Worker进程启动一个 ...

  5. Openjudge-NOI题库-对齐输出

     题目描述 Description 读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们.  输入输出格式 Input/output 输入格式: 只有一行,包含三个整数,整数之间以一个空格分开. ...

  6. sap 设备cnsapwin不支持页格式*****

    SAP SMARTFORMS 打印 CNSAPWIN 不支持页格式 解决办法: 在smartforms里的表格属性虽然定义了要打印的页格式 ZUNIA5 ,但是打印时会提示错误:" CNSA ...

  7. wefwewewe

    <a hred="https://www.baidu.com">dssf</a>

  8. MVC视图路径修改方法

    http://wenku.baidu.com/link?url=MwAaKgGevU7hfRuTyCL95ZbJuDsNc4b__jEWisY9GuzAJzEUgEdoj7uQ-wurbYtz1IQj ...

  9. Vladik and cards

    Vladik and cards time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  10. mac版VMware fusion

    百度网盘链接:链接: https://pan.baidu.com/s/1o8BAsrg 安装教程网上很多的,首先要下载一个window 10或其他版本的iso镜像文件,然后很好安装的.