
二分查找
解题思路:时间复杂度O(
l
o
g
2
n
log_2n
log2n),空间复杂度O(
1
1
1) |
---|
- 进行两遍二分查找,第一次先找到最左边的target
- 第二次找最右边的target

class Solution {
public int[] searchRange(int[] nums, int target) {
int lowerPos = findPos(nums, target, true);
if (-1 == lowerPos) return new int[] {-1, -1};
int higherPos = findPos(nums, target, false);
return new int[] {lowerPos, higherPos};
}
public int findPos(int[] nums, int target, boolean findLower) {
int left = 0, right = nums.length -1, targetPos = -1;
while (left <= right) {
int pos = left + ((right - left) >> 1);
if (nums[pos] > target) right = pos - 1;
else if (nums[pos] < target) left = pos + 1;
else {
if (findLower) {
right = pos - 1;
} else left = pos + 1;
targetPos = pos;
}
}
return targetPos;
}
}