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)

相关推荐
এ᭄画画的北北10 分钟前
力扣-1.两数之和
数据结构·算法·leetcode
shenghaide_jiahu35 分钟前
数学建模——递归和动态规划
算法·数学建模·动态规划
黄昏晓x1 小时前
数据结构----排序
java·数据结构·排序算法
清朝牢弟1 小时前
Ubuntu系统VScode实现opencv(c++)图像像素类型转换和归一化
c++·opencv·ubuntu
凯子坚持 c1 小时前
动态规划专题:详解二维费用背包问题——以“一和零”与“盈利计划”为例
算法·动态规划
黑色的山岗在沉睡1 小时前
P1948 [USACO08JAN] Telephone Lines S
数据结构·c++·算法·图论
快去睡觉~2 小时前
力扣301:删除无效的括号
数据结构·算法·leetcode
玖剹2 小时前
Linux文件操作:从C接口到系统调用
linux·服务器·c语言·c++·笔记·ubuntu
技术炼丹人3 小时前
从RNN为什么长依赖遗忘到注意力机制的解决方案以及并行
人工智能·python·算法
闪电麦坤954 小时前
数据结构:反转链表(reverse the linked list)
数据结构·链表