1.在排序数组中查找元素的第一个和最后一个位置
给你一个按照非递减顺序排列的整数数组 nums
,和一个目标值 target
。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target
,返回 [-1, -1]
。
你必须设计并实现时间复杂度为 O(log n)
的算法解决此问题。
public int[] searchRange(int[] nums, int target) {
int[] result = {-1, -1};
result[0] = findFirstIndext(nums, 0, nums.length -1, target);
result[1] = findLastIndex(nums, 0, nums.length -1, target);
return result;
}
private int findFirstIndext(int[] arr, int left, int right, int target) {
int index = -1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
index = mid; // 更新index
right = mid -1; // 继续向左搜索,找到第一个
} else if (arr[mid] > target) {
right = mid -1;