34. Search for a Range

来源:互联网 发布:垃圾分类网络知识竞赛 编辑:程序博客网 时间:2024/04/28 01:17
//题目一看就是二分法查找//二分查找最需要注意的就是不要出现循环中出不来的情况//特别是正体只有两个数的时候最可能出现循环跳不出来的情况class Solution {public:    vector<int> searchRange(vector<int>& nums, int target) {        int l=0,r=nums.size()-1;        int m=(l+r)/2;        while(!(nums[m]==target&&(m==0||nums[m-1]!=target))&&l<r)        {            if(nums[m]<target)             {                if(m==l) l++;                else l=m;            }            else r=m;            m=(l+r)/2;        }         if(nums[m]!=target) return {-1,-1};        int l0=m,r0=nums.size()-1;        int m0=(l0+r0+1)/2;        while(!(nums[m0]==target&&(m0==nums.size()-1||nums[m0+1]!=target))&&l0<r0)        {            if(nums[m0]<=target) l0=m0;            else             {                if(r0==m0) r0--;                else r0=m0;            }            m0=(l0+r0+1)/2;        }        return {m,m0};    }};
0 0
原创粉丝点击