题目链接 题目链接 我的代码 C++ class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { int left = 0, right = nums.size() - 1, middle; int start, end; int i, j; while (left <= right){ // 第一步,找到一个target middle = (left + right) / 2; if (nums[middle] > target){ right = middle - 1; } else if (nums[middle] < target){ left = middle + 1; } else { break; } } if (left < right) { // 若找到了一个target,则只需向前或向后遍历找到最后一个target位置即可 for(i = middle+1, end = middle; i <= nums.size()-1 && nums[i] == target; i++) // 在这里的循环终止条件这里搞了好久(呜呜)刚开始没注意数组的临界条件,引起了指针错误,改了之后又没改顺序.... end++; for(j = middle-1, start = middle; j >= 0 && nums[j] == target; j--) start--; return vector<int>{start, end}; } if (left == right) { return vector<int>{middle, middle}; } else{ return vector<int>{-1, -1}; } } }; 我的分析 二分法可以作为解题的第一步 对数组的下标进行操作时一定要注意不要越界 代码随想录的分析 两个二分法分别找到左右边界,不懂(苦笑~) 参考资料 代码随想录