Leetcode 153.寻找旋转数组中的最小值
寻找旋转数组中的最小值
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
请找出其中最小的元素。
你可以假设数组中不存在重复元素。
示例 1:
输入: [3,4,5,1,2]
输出: 1
示例 2:
输入: [4,5,6,7,0,1,2]
输出: 0
思路
这个题是《剑指offer》中非常经典的一道题。
对于没有重复数字的数组, 旋转之后的数组可以看做两个升序数组,而且前面数组的元素都比后面数组元素大。可以用二分查找。
代码如下:
- int findMin(vector<int> &num) {
- int left = 0;
- int right = num.size() - 1;
- int mid = 0;
- while (left < right) {
- mid = (left + right) / 2;
- //nums[mid] >nums[right] 说明nums[mid] 属于前面的数组
- if (num[mid] > num[right]) {
- left = mid + 1; //可以加1,将查找范围往后推
- }
- else if (num[mid] < num[right]) {
- right = mid; //不可以减1, 因为mid可能就是我们要查找的元素
- }
- }
- return num[left];
- }
letecode 154 在153的基础上加了一点, 那就是 查找的数组中包含了重复数字。 这上面代码只能处理nums[mid] == nums[right],对于 nums[mid]==nums[left] 或者 的情况无法处理。
例如:[10,1,10,10,10], 就没法得出结果。《剑指offer》中遇到 nums[left]=nums[mid] == nums[right]这种情况就对数组[left,right] 内的元素进行顺序遍历。但是我在网上发现了一个更棒的方法(详见这里)
他在遇到 nums[mid] == nums[right]的情况, 就让–right; 避开相等情况,同时也不会影响查找最小数。因为当前的nums[right]是最小数,–right去掉之后,因为有与nums[right]相等的元素任然在查找范围内,所以不会影响最后结果。
代码如下:
- int findMin(vector<int> &num) {
- int left = 0;
- int right = num.size() - 1;
- int mid = 0;
- while (left < right) {
- mid = (left + right) / 2;
- //nums[mid] >nums[right] 说明nums[mid] 属于前面的数组
- if (num[mid] > num[right]) {
- left = mid + 1; //可以加1,将查找范围往后推
- }
- else if (num[mid] < num[right]) {
- //不可以减1, 因为mid可能就是我们要查找的元素
- right = mid;
- }
- else --right; //处理相等情况。
- }
- return num[left];
- }
Leetcode 153.寻找旋转数组中的最小值的更多相关文章
- Java实现 LeetCode 153 寻找旋转排序数组中的最小值
153. 寻找旋转排序数组中的最小值 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中 ...
- Leetcode 153. 寻找旋转排序数组中的最小值
假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中最小的元素. 你可以假设数组中不存在重 ...
- Find Minimum in Rotated Sorted Array 旋转数组中找最小值 @LeetCode
O(n)的算法就不说了,这题主要考查的是 O(logn)的算法. 有序数组easy想到使用二分查找解决.这题就是在二分基础上做一些调整.数组仅仅有一次翻转,能够知道原有序递增数组被分成两部分,这俩部分 ...
- LeetCode:寻找旋转排序数组中的最小值【153】
LeetCode:寻找旋转排序数组中的最小值[153] 题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0 ...
- Leetcode之二分法专题-153. 寻找旋转排序数组中的最小值(Find Minimum in Rotated Sorted Array)
Leetcode之二分法专题-153. 寻找旋转排序数组中的最小值(Find Minimum in Rotated Sorted Array) 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ...
- [LeetCode每日一题]153.寻找旋转排序数组中的最小值
[LeetCode每日一题]153.寻找旋转排序数组中的最小值 问题 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组 nums = [0,1, ...
- 【leetcode】153. 寻找旋转排序数组中的最小值
题目链接:传送门 题目描述 现有一个有序数组,假设从某个数开始将它后面的数按顺序放到了数组前面.(即 [0,1,2,4,5,6,7] 可能变成 [4,5,6,7,0,1,2]). 请找出数组中的最小元 ...
- Leetcode之二分法专题-154. 寻找旋转排序数组中的最小值 II(Find Minimum in Rotated Sorted Array II)
Leetcode之二分法专题-154. 寻找旋转排序数组中的最小值 II(Find Minimum in Rotated Sorted Array II) 假设按照升序排序的数组在预先未知的某个点上进 ...
- [LeetCode] 154. 寻找旋转排序数组中的最小值 II
题目链接 : https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/ 题目描述: 假设按照升序排序的数组在预 ...
随机推荐
- 贪心 UVALive 6832 Bit String Reordering
题目传送门 /* 贪心:按照0或1开头,若不符合,选择后面最近的进行交换.然后选取最少的交换次数 */ #include <cstdio> #include <algorithm&g ...
- glassfish的启动
一.Glassfish v3 的安装 1. chmod 775/+x glassfish-v3.zip 改权限 2.unzip glassfish-v3.zip 3../asadmin star ...
- 468 Validate IP Address 验证IP地址
详见:https://leetcode.com/problems/validate-ip-address/description/ Java实现: class Solution { public St ...
- 配置maven环境变量cmd控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件
配置maven环境变量cmd控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件 首先maven环境变量: 变量名:MAVEN_HOME 变量值:E:\apache-maven-3.2 ...
- [转]Oracle - 数据库的实例、表空间、用户、表之间关系
本文转自:http://www.cnblogs.com/adforce/p/3312252.html 完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物 ...
- Echarts生成饼状图、条形图以及线形图 JS封装
1.在我们开发程序中,经常会用到生成一些报表,比方说饼状图,条形图,折线图等.不多说了,直接上封装好的代码,如下Echarts.js所示 以下代码是封装在Echarts.js文件中 /** * Cre ...
- Django系列:(1)PyCharm下创建并运行我们的第一个Django工程
准备工作: 假设读者已经安装好python 2x或3x,以及安装好Django,以及Pycharm. 我的配置: – Python 2.7.11 – Pycharm Professional 5.0. ...
- 10.3 Implementing pointers and objects and 10.4 Representing rooted trees
Algorithms 10.3 Implementing pointers and objects and 10.4 Representing rooted trees Allocating an ...
- [Tunny]CSS LESS框架基础
[黄映焜/Tunny,20140711] Less 是一个Css 预编译器,意思指的是它可以扩展Css语言,添加功能如允许变量(variables),混合(mixins),函数(functions) ...
- swiper移动端下不能正常轮播的解决方案-----此坑没躺过估计很难找到正确姿势
<script> var mySwiper = new Swiper('.swiper-container', { direction: 'vertical', //horizontal横 ...