华为 OD 训练营 · 题解精讲
LC34. 在排序数组中查找元素的第一个和最后一个位置
题目描述
给定一个按非递减顺序排列的整数数组 nums 和一个目标值 target,找出 target 在数组中的开始位置和结束位置。如果 target 不存在,返回 [-1, -1]。要求时间复杂度 O(log n)。
示例: 输入:nums = [5,7,7,8,8,10], target = 8 输出:[3,4]
思路解析
1. 核心思路:使用两次二分查找,分别找到第一个等于 target 的位置和最后一个等于 target 的位置。 2. 关键点:二分查找的边界处理,尤其是当 nums[mid] == target 时,如何移动指针来找到第一个或最后一个。 3. 易错点:注意数组为空或 target 不存在的情况;边界条件如 left <= right 或 left < right 的选择。 4. 时间复杂度:O(log n),空间复杂度:O(1)。