leetcode_数组_34_在排序数组中查找元素的第一个和最后一个位置

题目链接

题目链接

我的代码

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};
        }
    }
};

我的分析

  1. 二分法可以作为解题的第一步
  1. 对数组的下标进行操作时一定要注意不要越界

代码随想录的分析

两个二分法分别找到左右边界,不懂(苦笑~)

参考资料

代码随想录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值