算法24.0

153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode)

自己的理解:

如果题目表现出来明显的二段性 可以考虑用二分算法

为什么C--D[i]<=nums[n-1]?

因为c--d里面的元素 有可能包含着d 所以是小于等于

还有没有别的二段性?

AB段的元素都比A大 CD段的元素都比A小 选择A点的值作为参照物

这个时候需要边界情况的考虑 如果旋转之后是一个完整递增的数组(和原数组一样)

为什么当以A点为划分二段性是 出现这样的错误if(nums[mid]>=x) left=mid+1; //right = mid ;?

认真画图 就可以知道问题出在哪里

细节:

审题要认真审题 题目有些关键词是思路的提示(例如时间复杂度 例这道题里面的nums中所有整数互不相同)

二分算法画图的时候 要和题目信息相关

例如这道题 left和right的中间点mid 落到的是AB和CD里面 这样找就容易找到二分算法的条件

别人的讲解:

暴力解法: 遍历一遍数组 然后找到结果

优化暴力解法:

A--B C--D 这是明显的二段性 考虑用二分查找

这里的二段性是:AB中的元素大于D CD里面的元素小于D

A--B nums[i]>nums[n-1] C--D[i]<=nums[n-1]

开始二分查找 如果mid落在了ab上 mid小于ret 那么下一步是left=mid+1 (可以绕过去 因为ab里面并没有d)

如果mid落在了cd上 mid>ret 那么下一步是right=mid (right不可以绕过去 因为有可能跳过要查找的元素)

下面是思路图:

下面是题目、效果图和代码:

java 复制代码
class Solution 
{
    //选择A点为参照物
    public int findMin(int[] nums) 
    {  
        int left = 0 ,right = nums.length-1;
        int x = nums[left] ;//记录下A点的元素
        
        //特殊情况的处理
        if(nums[left]<nums[right])
        {
           return nums[left];
        }


        while(left<right)
        {
            int mid = left+(right-left)/2;
            
            if(nums[mid]>=x) left=mid+1; //right = mid ;
            else right = mid ;//left = mid + 1;
        }
        return nums[left];
    }
}
//特殊情况的处理:如果旋转一个循环呢  到时候结果是原数组
java 复制代码
class Solution 
{
    public int findMin(int[] nums) 
    {
       int left = 0,right = nums.length-1;
       int x =nums[right];//标记一下最后元素的位置 也就是思路图里面的D元素
       while(left<right)
       {
        int mid = left + (right-left)/2;
        if(nums[mid]>x) left = mid + 1;
        else right = mid ; 
       }
       return nums[left];
    }
}
//xiyu251103&1#3*6
相关推荐
念何架构之路16 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星16 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑17 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光17 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩18 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_6294947318 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ19 小时前
单词拆分----dp
算法
智者知已应修善业20 小时前
【51单片机LED闪烁10次数码管显示0-9】2023-12-14
c++·经验分享·笔记·算法·51单片机
智者知已应修善业20 小时前
【51单片机2按键控制1个敞亮LED灯闪烁和熄灭】2023-11-3
c++·经验分享·笔记·算法·51单片机
AI算法沐枫20 小时前
大模型 | 大模型之机器学习基本理论
人工智能·python·神经网络·学习·算法·机器学习·计算机视觉