LeetCode OJ 153. Find Minimum in Rotated Sorted Array
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的更多相关文章
- 【LeetCode】153. Find Minimum in Rotated Sorted Array 解题报告(Python)
[LeetCode]153. Find Minimum in Rotated Sorted Array 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode. ...
- 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 ...
- 【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 ...
- 【刷题-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 ...
- 【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 ...
- 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 ...
- 153. Find Minimum in Rotated Sorted Array - LeetCode
Question 153. Find Minimum in Rotated Sorted Array Solution 题目大意:给一个按增序排列的数组,其中有一段错位了[1,2,3,4,5,6]变成 ...
- LeetCode 新题: Find Minimum in Rotated Sorted Array 解题报告-二分法模板解法
Find Minimum in Rotated Sorted Array Question Solution Suppose a sorted array is rotated at some piv ...
- 【LeetCode】154. Find Minimum in Rotated Sorted Array II 解题报告(Python)
[LeetCode]154. Find Minimum in Rotated Sorted Array II 解题报告(Python) 标签: LeetCode 题目地址:https://leetco ...
随机推荐
- javascript入门基础知识
JavaScript介绍: 1. javascrip是互联网上最流行的脚本语言,可用于Web和HTML,更可广泛用于服务器.pc端.移动端. 2. javascript脚本语言: javascript ...
- Angular 2.0 从0到1 (五)
第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Angular 2.0 从0到1 (四)第五节: ...
- 【ARM】S5PV210芯片中的BL0的作用
S5PV210芯片中的BL0的作用:(1)关闭看门狗:(2)清除指令寄存器:(3)初始化栈区域:(4)初始化堆区域:(5)初始化块设备复制功能:(6)初始化PLL和设置系统时钟:(7)拷贝BL1到片内 ...
- 问题: 在使用thinkphp自带分页类时,在设置尾页显示的最后一页时,用setConfig(“last”,”尾页”)来设置样式,发现无效。
分析: 在分页类(/ThinkPHP/Library/Think/Page.class.PHP)里面有一个共有属性: public $lastSuffix = true; // 最后一页是否显示总页数 ...
- 【python标准库】内建函数
abs(x) 返回一个数的绝对值.参数可以是普通的整数,长整数或者浮点数.如果参数是个复数,返回它的模. all(iterable) 如果iterable的所有元素为真(或者iterable为空), ...
- java第五周学习
在Java中类与类之间的关系 1.聚合关系 : 两个类的关联程度较低,可以单独存在. 2.组合关系 : 两个的关联程度比较高. Java中如何来表现这个关系. 一类A作为属性存在类B中. 3.依赖关系 ...
- HTTP 错误 404.8 - Not Found
HTTP 错误 404.8 - Not Found请求筛选模块被配置为拒绝包含 hiddenSegment 节的 URL 中的路径. 详细错误信息模块 RequestFilteringModule 通 ...
- Hadoop之MapReduce分布式计算
简单介绍一下项目背景——很简单,作死去接下老师的活,然后一干就是半个月,一直忙着从零基础到使用Hadoop中的MapReduce来解决一个实际问题,也就是用来计算一个数据量较大的二度朋友关系. 那么首 ...
- 向量相加CUDA练习
#include<string.h> #include<math.h> #include<stdlib.h> #include<stdio.h> #de ...
- mysql安装和基本配置-redhat
1.redhat yum替换参考 url:http://blog.csdn.net/zcyhappy1314/article/details/17580943 2.yum卸载mysql rpm -qa ...