LeetCode 34. Search for a Range

来源:互联网 发布:菜鸟网络能上市吗? 编辑:程序博客网 时间:2024/06/05 07:36

题意

在一个有序序列中找到一个target出现的范围

思路

两次二分查找,一个查找上界,一个查找下界

需要注意的case
二分查找中有可能最后一次遍历的数未被检查,所以说在查找后检查一下.

代码

class Solution {public:    vector<int> searchRange(vector<int>& nums, int target) {        int ansL = -1, ansR = -1;        int l = 0, r = nums.size() - 1;        while(l < r){            int mid = (l + r) / 2;            if(nums[mid] < target){                l = mid + 1;            } else{                r = mid;                if(nums[mid] == target){                    ansL = mid;                }            }        }        if(nums.size() > 0 && l == r && nums[l] == target) ansL = l;        l = 0, r = nums.size() - 1;        while(l < r){            int mid = (l + r) / 2;            if(nums[mid] > target){                r = mid;            } else{                l = mid + 1;                if(nums[mid] == target){                    ansR = mid;                }            }        }        if(nums.size() > 0 && l == r && nums[r] == target) ansR = r;        vector<int>ans;        ans.push_back(ansL);        ans.push_back(ansR);        return ans;    }};
原创粉丝点击