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

本题要求在旋转排序数组中寻找最小值。例如:

输入:nums = [3,4,5,1,2] 输出:1

解题思路:通过比较二分值x与数组末尾元素nums.back()来判断x的位置:

  • 若x <= nums.back(),说明x位于第二段递增序列,此时x可能是最小值或在最小值右侧
  • 若x > nums.back(),说明x位于第一段递增序列,x必定在最小值左侧

通过不断二分缩小范围,最终循环结束时指向的元素即为最小值,返回其下标即可。

cpp 复制代码
class Solution {
public:
    int findMin(vector<int>& nums) {
        int left = -1,right = nums.size() - 1;
        while (left + 1 < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] < nums.back()) {
                right = mid;
            }else{
                left = mid;
            }
        }
        return nums[right];
    }
};

时间复杂度:O(logn)

空间复杂度:O(1)

相关推荐
G等你下课11 分钟前
摆动序列
算法
地平线开发者15 分钟前
地平线高效 backbone: HENet - V1.0
算法·自动驾驶
Postkarte不想说话26 分钟前
二叉平衡搜索树(AVL树)
算法
红狐寻道35 分钟前
osgEarth初探
c++·后端
安全系统学习1 小时前
【网络安全】文件上传型XSS攻击解析
开发语言·python·算法·安全·web安全
星沁城1 小时前
149. 直线上最多的点数
java·算法·leetcode
Dark__Monarch2 小时前
我的世界之战争星球 暮色苍茫篇 第二十二章、夜影
c++
乌鸦9442 小时前
《map和set的使用介绍》
c++·map和set的使用介绍
皮蛋瘦肉粥_1212 小时前
代码随想录day10栈和队列1
数据结构·算法
爱奥尼欧2 小时前
【C++语法】类和对象(4)——日期类和const成员函数
数据库·c++