leetcode-Search for a Range-34

输入一个递增序列和一个target,找出序列中target的上界和下界

二分,实现lower_bound和upper_bound,要注意的是没有找到target的情况的判断:low==high,或者nums[high-1]!=target(high初始设为nums.size())

 1 class Solution {
 2 public:
 3     vector<int> searchRange(vector<int>& nums, int target) {
 4         int l=0,r=nums.size()-1;
 5         int low=-1,high=nums.size();
 6         while(l<=r){
 7             int mid=(l+r)>>1;
 8             if(nums[mid]>=target){
 9                 low=mid;
10                 r=mid-1;
11             }
12             else l=mid+1;
13         }
14         l=0,r=nums.size()-1;
15         while(l<=r){
16             int mid=(l+r)>>1;
17             if(nums[mid]>target){
18                 high=mid;
19                 r=mid-1;
20             }
21             else l=mid+1;
22         }
23         vector<int> v;
24         if(low==high||nums[high-1]!=target){
25             v.push_back(-1);
26             v.push_back(-1);
27             return v;
28         }
29         v.push_back(low);
30         v.push_back(high-1);
31         return v;
32     }
33 };

 

posted @ 2016-08-30 11:11  0_summer  阅读(86)  评论(0编辑  收藏  举报