[LeetCode] #34 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
输入:nums = [5,7,7,8,8,10]
, target = 8
输出:[3,4]
有序数组查找使用二分法,但需要得到两个下标
因此分两次查找,第一次找左下标,找的时候往左靠
第二次找右下标,找的时候往右靠
class Solution { public int[] searchRange(int[] nums, int target) { int[] res = new int[] {-1, -1}; res[0] = helper(nums, target, true); res[1] = helper(nums, target, false); return res; } public int helper(int[] nums, int target, boolean flag) { int res = -1; int l = 0, h = nums.length - 1, mid; while(l <= h) { mid = l + (h - l) / 2; if(target < nums[mid]) h = mid - 1; else if(target > nums[mid]) l = mid + 1; else { res = mid; if(flag) h = mid - 1; else l = mid + 1; } } return res; } }
知识点:无
总结:无