题目地址: ​​https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/submissions/​

运行的效果:

Leetcode34. 在排序数组中查找元素的第一个和最后一个位置_算法


代码如下:

public static int[] searchRange(int[] nums, int target) {
int[] result = {-1, -1};
if (nums.length == 1) {
if (nums[0] == target) {
result[0] = 0;
result[1] = 0;
return result;
} else {
return result;
}
}
int left = 0, right = nums.length - 1;
while (left < right) {
if (right - left == 1) { //两个指针挨到一起了
if (nums[left] == target) {
result[0] = left;
}
if (nums[right] == target) {
result[1] = right;
}
if (result[0] == -1) {
result[0] = result[1];
}
if (result[1] == -1) {
result[1] = result[0];
}
return result;
}
int mid = (left + right) / 2 > 0 ? (left + right) / 2 : 1;
if (nums[mid] > target) {
right = mid;
}
if (nums[mid] < target) {
left = mid;
}
if (nums[mid] == target) {
left = mid - 1;
right = mid + 1;
while (left >= 0 && nums[left] == target) {
left--;
}
while (right < nums.length && nums[right] == target) {
right++;
}
result[0] = left + 1;
result[1] = right - 1;
break;
}
}
return result;
}