leetCode第33题

cpp 复制代码
int search(vector<int>& nums, int target) {
        int n = nums.size();
        int left = 0,right = n-1;

        while(left<=right)
        {
            int mid =left + (right - left)/2;

            if(nums[mid]==target){
                return mid;
            }

            if(nums[left]<=nums[mid]){//说明是单调区间
                if(nums[mid]>target&&target>=nums[left]){
                    right=mid-1;
                }else{
                    left=mid+1;
                }
            }else{//mid跨区间
                if(nums[mid]<target&&target<=nums[right]){//当跨区间时用单调区间的条件去修改left和right的值比较简单
                    left=mid+1;
                }else{
                    right=mid-1;
                }
            }
        }
        return -1;
    }

重点在大的if else 分支语句中mid落在区间中的位置两种情况对应着if else语句分支

left,mid区间要么落在单调区间要么落在非单调区间,在对应的区间也对应着外面的if else语句的两种情况。内部的if else语句则是target落在left,mid区间的情况。

相关推荐
通信小呆呆6 小时前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
benben0446 小时前
强化学习之DQN算法族(基于gymnasium开发)
算法
小小工匠7 小时前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾7 小时前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
何以解忧,唯有..7 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
想吃火锅10058 小时前
【leetcode】88.合并两个有序数组js
算法
生成论实验室9 小时前
机器人:一个自主运动的系统
人工智能·算法·语言模型·机器人·自动驾驶·agi·安全架构
Qres8219 小时前
算法复键——树状数组
数据结构·算法
H178535090969 小时前
SolidWorks第四部分_直接实体建模特征9_替换面原理
线性代数·算法·机器学习·3d建模·solidworks