34. Search for a Range
https://leetcode.com/problems/search-for-a-range/description/
与上一题很相似,原理很清晰,两次二分搜索,一次找前边界一次找后边界,不必在找到target后直接break。但我真的是太讨厌二分搜索了,边界条件实在头疼。
class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { int l = 0, r = nums.size()-1; vector<int> res(2,-1); if (nums.empty()) return res; if (nums.size()==1 && nums[0] == target) return (vector<int>){0,0}; while (l < r){ int mid = (l+r)/2; if (nums[mid]<target) l = mid+1; else r = mid; } if (nums[r]!=target) return res; res[0] = r; r = nums.size();///!!! while (l < r){ int mid = (l+r)/2; if (nums[mid]>target) r = mid; else l = mid+1; } res[1] = l-1;//!!! return res; } };