2848、与车相交的点

2848、[简单] 与车相交的点

1、题目描述

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

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

2、解题思路

排序和合并区间

  • 首先对汽车坐标区间进行排序,使得区间按照起点从小到大排列。
  • 然后,通过遍历排序后的区间来合并重叠的区间。
  • 合并的过程是:如果当前区间的起点在已合并区间的终点之后,说明没有重叠,直接添加新的区间;否则,更新已合并区间的终点。

计算覆盖点数

  • 合并完所有区间后,计算每个合并后的区间所覆盖的整数点数,并累加到结果中。

3、代码实现

复制代码
class Solution {
public:
    int numberOfPoints(vector<vector<int>>& nums) {
        if (nums.size() == 0) {
            return 0; // 如果没有汽车,返回0
        }
        
        vector<vector<int>> ans; // 用于存储合并后的区间
        sort(nums.begin(), nums.end()); // 按区间起点进行排序
        ans.push_back(nums[0]); // 将第一个区间加入结果集
        
        for (int i = 1; i < nums.size(); i++) {
            if (ans.back()[1] < nums[i][0]) {
                // 当前区间与最后一个合并区间不重叠,添加新的区间
                ans.push_back(nums[i]);
            } else {
                // 合并区间,更新终点
                ans.back()[1] = max(ans.back()[1], nums[i][1]);
            }
        }
        
        int ret = 0; // 结果变量
        for (const auto& v : ans) {
            // 计算每个合并后区间的覆盖点数
            ret += v[1] - v[0] + 1;
        }
        
        return ret; // 返回被覆盖的整数点数
    }
};

4、复杂度分析

  • 时间复杂度O(n log n),主要是排序的时间复杂度,其中 n 是汽车的数量。
  • 空间复杂度O(n),用于存储合并后的区间。
相关推荐
郝学胜-神的一滴10 分钟前
计算机图形学中的光照模型:从基础到现代技术
开发语言·c++·程序人生·图形渲染
程序员大雄学编程1 小时前
「深度学习笔记4」深度学习优化算法完全指南:从梯度下降到Adam的实战详解
笔记·深度学习·算法·机器学习
小O的算法实验室2 小时前
2022年ASOC SCI2区TOP,基于竞争与合作策略的金字塔粒子群算法PPSO,深度解析+性能实测,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
深耕AI2 小时前
MFC + OpenCV 图像预览显示不全中断问题解决:GDI行填充详解
c++·opencv·mfc
南莺莺2 小时前
邻接矩阵的基本操作
数据结构·算法··邻接矩阵
余辉zmh2 小时前
【C++篇】:ServiceBus RPC 分布式服务总线框架项目
开发语言·c++·rpc
水饺编程2 小时前
第3章,[标签 Win32] :窗口类03,窗口过程函数字段
c语言·c++·windows·visual studio
千里马-horse2 小时前
在android中 spdlog库的log如何在控制台上输出
android·c++·spdlog
微波仿真3 小时前
实现多通道ADC多次测量取平均值,使用DMA
算法
余俊晖3 小时前
多模态文档理解视觉token剪枝思路
人工智能·算法·剪枝·多模态