leetcode 在排序数组中查找元素的第一个和最后一个位置 中等

两遍二分就行
class Solution { public: vector<int> searchRange(vector<int> &nums, int target) { return {solve(nums, target, 0), solve(nums, target, 1)}; } private: int solve(vector<int> &nums, const int &target, int flag) { // flag: 0 最前, 1 最后 int l = 0, r = nums.size() - 1; int ans = -1; while(l <= r) { int mid = (l + r) >> 1; if(nums[mid] > target || (!flag && nums[mid] == target)){ r = mid - 1; } else l = mid + 1; if(nums[mid] == target) ans = mid; } return ans; } };

浙公网安备 33010602011771号