LeetCode:2848. 与车的相交点 一次遍历,时间复杂度O(n)

2848. 与车的相交点

today 2848. 与车的相交点

题目描述

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

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

示例 1:

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

示例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

题目解析

题目要求找出任意部分覆盖的整数点的数目。那么我们可以维护一个数组arr,表示所有整数点,由于1 <= starti <= endi <= 100,我们数组的长度为101,其中arr[i]表示整数点i是否被车覆盖。

遍历nums,对于每辆车,我们将 s t a r t i start_i starti e n d i end_i endi 之间的整数点都标记为true,即arr[starti] = truearr[endi+1] = true

最后遍历arr,统计true的个数即可。

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

代码实现

C++版本:

class Solution {
public:
    int numberOfPoints(vector<vector<int>>& nums) {
        int n=nums.size();
        int ans=0;
        vector<bool> arr(101,0);
        for(int i=0;i<n;i++){
            for(int j=nums[i][0];j<=nums[i][1];j++){
                if(!arr[j]){
                    ans++;
                    arr[j]=true;
                }
            }
        }
        return ans;
    }
};

Go版本:

func numberOfPoints(nums [][]int) int { 
    arr:=make([]bool,101)
    ans:=0
    for i:=range(nums){
        for j:=nums[i][0];j<=nums[i][1];j++{
            if(!arr[j]){
                ans++
                arr[j]=true
            }
        }
    }
    return ans
}

Python版本:

class Solution(object):
    def numberOfPoints(self, nums):
        n=[False]*101
        l=len(nums)
        ans=0
        for i in range(0,l):
            for j in range(nums[i][0],nums[i][1]+1):
                if not n[j]  :
                    ans+=1
                    n[j]=True
        return ans
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值