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

相关推荐
吴声子夜歌几秒前
JavaScript——数组
java·javascript·算法
不知名。。。。。。。。5 分钟前
仿muduo库实现高并发服务器----HttpServer
运维·服务器·算法
暮冬-  Gentle°7 分钟前
移动设备上的C++优化
开发语言·c++·算法
2401_874732539 分钟前
C++中的装饰器模式高级应用
开发语言·c++·算法
季明洵13 分钟前
回溯介绍及实战
java·数据结构·算法·leetcode·回溯
m0_6625779717 分钟前
模板编译期哈希计算
开发语言·c++·算法
m0_6625779717 分钟前
C++代码静态检测
开发语言·c++·算法
阿贵---18 分钟前
编译器命令选项优化
开发语言·c++·算法
minji...18 分钟前
Linux 进程间通信(一)进程间通信与匿名管道
linux·运维·服务器·数据结构·数据库·c++
add45a18 分钟前
分布式计算C++库
开发语言·c++·算法