力扣热门100题之在排序数组中查找元素的第一个和最后一个位置

张开发
2026/5/31 22:16:23 15 分钟阅读
力扣热门100题之在排序数组中查找元素的第一个和最后一个位置
思路先用二分找第一个等于 target的位置左边界再用二分找最后一个等于 target的位置右边界没找到就返回[-1,-1]左边界遇到 target就往左缩最终l停在第一个目标位置右边界遇到 target就往右扩最终r停在最后一个目标位置最后判断一下是否真的等于 target不是就返回 -1完整代码实现class Solution { public int[] searchRange(int[] nums, int target) { int left findLeft(nums, target); int right findRight(nums, target); return new int[] { left, right }; } public int findLeft(int[] nums, int target) { int l 0, r nums.length - 1; while (l r) { int mid l (r - l) / 2; if (nums[mid] target) { r mid - 1; } else { l mid 1; } } // 找到的位置必须合法且等于 target if (l nums.length nums[l] target) return l; return -1; } public int findRight(int[] nums, int target) { int l 0, r nums.length - 1; while (l r) { int mid l (r - l) / 2; if (nums[mid] target) { l mid 1; } else { r mid - 1; } } if (r 0 nums[r] target) return r; return -1; } }

更多文章