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

相关推荐
power 雀儿3 小时前
掩码(Mask)机制 结合 多头自注意力函数
算法
会叫的恐龙3 小时前
C++ 核心知识点汇总(第六日)(字符串)
c++·算法·字符串
小糯米6013 小时前
C++顺序表和vector
开发语言·c++·算法
We་ct3 小时前
LeetCode 56. 合并区间:区间重叠问题的核心解法与代码解析
前端·算法·leetcode·typescript
Lionel6893 小时前
分步实现 Flutter 鸿蒙轮播图核心功能(搜索框 + 指示灯)
算法·图搜索算法
小妖6663 小时前
js 实现快速排序算法
数据结构·算法·排序算法
xsyaaaan4 小时前
代码随想录Day30动态规划:背包问题二维_背包问题一维_416分割等和子集
算法·动态规划
zheyutao5 小时前
字符串哈希
算法
A尘埃5 小时前
保险公司车险理赔欺诈检测(随机森林)
算法·随机森林·机器学习
大江东去浪淘尽千古风流人物5 小时前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法