Leetcode43- 与车相交的点(2357)

1、题目

给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i,nums[i] = [starti, endi] ,其中 starti 是第 i 辆车的起点,endi 是第 i 辆车的终点。

返回数轴上被车 任意部分 覆盖的整数点的数目。

示例 1:

输入:nums = [[3,6],[1,5],[4,7]]
输出:7
解释:从 1 到 7 的所有点都至少与一辆车相交,因此答案为 7 。
示例 2:

输入:nums = [[1,3],[5,8]]
输出:7
解释:1、2、3、5、6、7、8 共计 7 个点满足至少与一辆车相交,因此答案为 7 。

提示:

1 <= nums.length <= 100
nums[i].length == 2
1 <= starti <= endi <= 100

2、解

初始化一个长度为101所有元素为0的数组(注意是101,因为题目是1 <= starti <= endi <= 100,而数组下标是从0开始,所以是101)。遍历每个数组从第starti,到endi,并将其区间的元素置为1表示该点已停有车辆。最后结果将该101的数组求和即可。

    int numberOfPoint(vector<vector<int>>& nums){
        int cnt[101] = {0};
        for(auto num : nums){
            for(int i = num[0]; i <= num[1]; i++){
                cnt[i] = 1;
            }
        }
        int result = 0;
        for(auto t : cnt){
            result += t;
        }

        return result;
    }

在这里插入图片描述

3、进阶(差分数组)

在这里插入图片描述

    int numberOfPointA(vector<vector<int>>& nums){
        int cnt[102] = {0};
        for(auto num : nums){
            cnt[num[0]] ++;
            cnt[num[1] + 1] --;
        }

        int result = 0;
        int temp = 0;
        for(auto t : cnt){
            temp += t;
            if(temp){
                result++;
            }
        }

        return result;
    }

如图所示,只需要统计累加时大于0的元素个数。对比2解中的时间复杂度从 O(C)降低至 O(1)。注意此时数组长度需要比2中大1,因为代码中有访问数组的后一个元素。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我宿孤栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值