题目链接:传送门

题目描述

现有一个有序数组,假设从某个数开始将它后面的数按顺序放到了数组前面。(即 [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


题解来源:传送门

算法(二分) O(logn)
处理这种问题有个常用技巧:如果不想处理边界情况,比如当数组只有两三个数的时候,代码会出问题。我们可以在数组长度太短(这道题中我们判断数组长度小于5)时,直接暴力循环做;数组有一定长度时再用二分做。
这样做并不会影响算法的时间复杂度,但会缩短写代码的时间。

为了便于理解,我们将数组中的数画在二维坐标系中,横坐标表示数组下标,纵坐标表示数值,如下所示:

      

我们会发现数组中最小值前面的数 nums[i]nums[i] 都满足:nums[i]≥nums[0],其中nums[n−1] 是数组最后一个元素;而数组中最小值后面的数(包括最小值)都不满足这个条件。
所以我们可以二分出最小值的位置。

另外,不要忘记处理数组完全单调的特殊情况。

时间复杂度分析:二分查找,所以时间复杂度是 O(logn)。

 class Solution {
public:
int findMin(vector<int>& nums) {
if ( nums[] < nums.back() ) return nums[] ;
int L = , R = nums.size() - , Mid , ans = ;
while ( L < R ){
Mid = L+R >> ;
if( nums[] <= nums[Mid] ){
ans = Mid ;
L = Mid + ;
}else {
R = Mid ;
}
}
return nums[L] ;
}
};

寻找旋转排序数组中的最小值

【leetcode】153. 寻找旋转排序数组中的最小值的更多相关文章

  1. Java实现 LeetCode 153 寻找旋转排序数组中的最小值

    153. 寻找旋转排序数组中的最小值 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中 ...

  2. Leetcode 153. 寻找旋转排序数组中的最小值

    假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中最小的元素. 你可以假设数组中不存在重 ...

  3. LeetCode:寻找旋转排序数组中的最小值【153】

    LeetCode:寻找旋转排序数组中的最小值[153] 题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0 ...

  4. Leetcode之二分法专题-153. 寻找旋转排序数组中的最小值(Find Minimum in Rotated Sorted Array)

    Leetcode之二分法专题-153. 寻找旋转排序数组中的最小值(Find Minimum in Rotated Sorted Array) 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ...

  5. [LeetCode每日一题]153.寻找旋转排序数组中的最小值

    [LeetCode每日一题]153.寻找旋转排序数组中的最小值 问题 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组 nums = [0,1, ...

  6. [LeetCode] 154. 寻找旋转排序数组中的最小值 II

    题目链接 : https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/ 题目描述: 假设按照升序排序的数组在预 ...

  7. Java实现 LeetCode 154 寻找旋转排序数组中的最小值 II(二)

    154. 寻找旋转排序数组中的最小值 II 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找 ...

  8. 领扣(LeetCode)寻找旋转排序数组中的最小值 个人题解

    假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中最小的元素. 你可以假设数组中不存在重 ...

  9. LeetCode153.寻找旋转排序数组中的最小值

    153.寻找旋转排序数组中的最小值 描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出 ...

随机推荐

  1. 【CF589 E】Another Filling the Grid

    一个很套路的容斥裸题,这里记录一下scb 的切题过程 Description 有一个 \(n\times n\) 的矩阵,你需要往每格里填一个 \([1,k]\) 的整数,使得每一行.每一列的最小值都 ...

  2. Jenkins 插件加速下载

    本文主旨 看到好多加速Jenkins安装插件速度的文章,大多数教程中都是在插件配置里使用 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/up ...

  3. CISCO实验记录十一:switch端口安全配置

    1.启用交换机端口安全 2.限制端口最大访问量为1,超出后关闭端口 1.启用交换机端口安全 #interface gigabitEthernet 0/1 #switchport mode access ...

  4. [转发]Android视频技术探索之旅:美团外卖商家端的实践

    美团技术团队 2019-09-12 20:02:11 背景 2013年美团外卖成立,至今一直迅猛发展.随着外卖业务量级与日俱增,单一的文字和图片已无法满足商家的需求,商家迫切需要更丰富的商品描述手段吸 ...

  5. sqlplus 导出一张表数据

    内网只让用sql developer 这软件搓的不行,数据加载到51行就黑了,没法法用sqlplus. 打开cmd, sqlplus user/passwd@ip:port/库名set colsep ...

  6. C之交换数据案例

    //值传递 void swap(int i,int j){ printf("交换后:\n "); int tmp; tmp = i; i = j; j = tmp; } //引用传 ...

  7. C++ STL partial_sort_copy iterator

    vector<int>::iterator iter1 = partial_sort_copy(deq1.begin(), deq1.end(), vec1.begin(), vec1.e ...

  8. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_10-freemarker静态化测试-基于模板文件静态化

    把resource拷贝到test目录下 只保留文件夹结构和test1.ftl这个模板文件就可以了. 新建一个包 编写测试类 使用freemaker提供的方法生成静态文件 Configuration是i ...

  9. mac配置maven项目的方法(含导入selenium包)

    1.配置了java的环境变量    文件位置:  /Users/lucax/.bash_profile JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1 ...

  10. find_player 不查找已经晕到玩家的问题

    问题场景: 游戏中出现个BUG,是关于登陆后出现分身的问题. 查找当前登陆者的身份 是否之前存在相同的角色实例,当玩家昏迷状态时 使用 find_player是找不到这个玩家的,所以 玩家利用角色昏迷 ...