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区间的情况。

相关推荐
程序员老舅21 分钟前
啃透 I2C 驱动开发,才算入门嵌入式 Linux 内核驱动
数据结构·驱动开发·b树·内核·嵌入式·嵌入式开发·i2c
lueluelue471 小时前
LeetCode:链表
算法·leetcode·链表
橘子汽水1684 小时前
Leetcode 23,543合并K个升序链表,二叉树的直径
算法·leetcode·链表
huameinan狮子4 小时前
Adaboost算法原理与计算实例
算法
别怪我很水4 小时前
API中提供了VelocityTracker类用于计算触摸事件MotionEvent的速度,而其内部默认使用的方法就是最小二乘法,本 ...
算法·gitee·最小二乘法
Re.不晚7 小时前
挑战做100道力扣算法- DAY1
算法·leetcode·职场和发展
蓝悦无人机7 小时前
《Planning algorithms》读书笔记——第1章 引言
算法·读书笔记·规划算法·lavalle
Sagittarius_A*8 小时前
分组密码基础(二):Feistel 结构与 DES 的设计思想
算法·信息安全·密码学·des·数论
青山木8 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode