LeetCode程序员面试金典:在排序数组中查找元素的第一个和最后一个位置

发布时间:2023-04-24 10:17:20

  题目:

  给你一个按非递减顺序排列的整数组 nums,和一个目标值 target。请在数组中找出给定目标值的开始和结束位置。

  如果数组中没有目标值 target,返回[-1, -1]。

  你必须设计并实现时间的复杂性(log n)算法解决了这个问题。

  示例 1:

  输入:nums = [5,7,7,8,8,10], target = 8

  输出:[3,4]

  示例2:

  输入:nums = [5,7,7,8,8,10], target = 6

  输出:[-1,-1]

  示例 3:

  输入:nums = [], target = 0

  输出:[-1,-1]

  代码实现:class Solution { public int[] searchRange(int[] nums, int target) { int leftIdx = binarySearch(nums, target, true); int rightIdx = binarySearch(nums, target, false) - 1; if (leftIdx <= rightIdx && rightIdx < nums.length && nums[leftIdx] == target && nums[rightIdx] == target) { return new int[]{leftIdx, rightIdx}; } return new int[]{-1, -1}; } public int binarySearch(int[] nums, int target, boolean lower) { int left = 0, right = nums.length - 1, ans = nums.length; while (left <= right) { int mid = (left + right) / 2; if (nums[mid] > target || (lower && nums[mid] >= target)) { right = mid - 1; ans = mid; } else { left = mid + 1; } } return ans; }}

上一篇 LeetCode面试题:最大矩形
下一篇 MyBatis入门

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题