34.在排序数组中查找元素的第一个和最后一个位置
java">给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
输入:整型数组,目标整型变量
输出:整型数组,存储开始位置和结束索引
思路:非递减数组,可以实现一个方法,找到每一个目标值的最左边索引,然后target+1起始索引的前一位就是最右边索引
java">class Solution {public int[] searchRange(int[] nums, int target) {int start = leftIndex(nums, target);if(start == nums.length || nums[start] != target){//说明不存在return new int[]{-1, -1};}//end在前一位int end = leftIndex(nums, target + 1) - 1;return new int[]{start, end};}public int leftIndex(int[] nums, int target){int left = 0;int right = nums.length - 1;//循环结束后,left始终指向target的最左边while(left <= right){int mid = (left + right) / 2;//核心if(nums[mid] >= target){right = mid - 1;}else{left = mid + 1;//}}return left; }
}