描述
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:
不知道这道题的难度在哪,不就是二分查找吗?
因为target可能不止一个,然后有两种方案,一种是直接修改二分查找的代码,一种是查找完之后再找,但我是直接调用的二分,所以就在查找之后再左右寻找。
public static int[] searchRange(int[] nums, int target) {
int[] arr = new int[2];
int index = binarySearch(nums, 0, nums.length, target);
if (index < 0) {
arr[0] = -1;
arr[1] = -1;
} else {
if (index > 0 && nums[index-1] == target) {
int a = index;
while (a >= 0 && nums[a] == target) {
a--;
}
arr[0] = a+1;
} else {
arr[0] = index;
}
if (index < nums.length-1 && nums[index + 1] == target) {
int b = index;
while (b < nums.length && nums[b] == target) {
b++;
}
arr[1] = b-1;
} else {
arr[1] = index;
}
}
return arr;
}