力扣题解2848

news2024/9/20 14:26:55

大家好,欢迎来到无限大的频道。

今日继续给大家带来力扣题解。

题目描述(简单):

与车相交的点

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

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

解题思路:

这道问题抽象就抽象在,读不懂题目要求干啥,也不明白举例是什么意思,得先把题目看懂。(我来中译中一下)

这个问题可以理解为在数轴上有多辆车,每辆车的停车区域用一个区间来表示,例如 nums[i] = [starti, endi] 表示第 i 辆车的起点为 starti,终点为 endi。我们需要计算在数轴上这些车的停车区域重叠部分所覆盖的整数点的总数。

具体来说,我们需要求出所有车辆停车区间内的整数点的总和,即使得某一点被多辆车的区间覆盖也只算一次。

示例说明:

假设车辆的区间如下:

  • 车1: [1, 3]

  • 车2: [2, 5]

  • 车3: [4, 6]

那么这些车辆覆盖的区间为:

  • 车1覆盖的整数点为 {1, 2, 3}

  • 车2覆盖的整数点为 {2, 3, 4, 5}

  • 车3覆盖的整数点为 {4, 5, 6}

所有被覆盖的整数点为 {1, 2, 3, 4, 5, 6},所以被覆盖的整数点总数为 6。

算法思路

  1. 合并区间:首先对所有区间进行合并,去掉重叠部分。

  2. 计算被覆盖的点:在合并之后计算每个区间中整数点的数量,即为 end - start + 1 的总和。

3.采用排序加贪心策略

参考代码:

// 定义一个结构体来表示区间
typedef struct {
    int start;
    int end;
} Interval;
​
// 比较函数用于排序
int compare(const void *a, const void *b) {
    Interval *intervalA = (Interval *)a;
    Interval *intervalB = (Interval *)b;
    return intervalA->start - intervalB->start;
}
​
int numberOfPoints(int** nums, int numsSize, int* numsColSize) {
    if (numsSize == 0) return 0;
​
    // 1. 创建一个 Interval 数组
    Interval* intervals = (Interval*)malloc(numsSize * sizeof(Interval));
​
    // 2. 将 nums 转换为 Interval 数组
    for (int i = 0; i < numsSize; i++) {
        intervals[i].start = nums[i][0];
        intervals[i].end = nums[i][1];
    }
​
    // 3. 排序区间
    qsort(intervals, numsSize, sizeof(Interval), compare);
​
    int totalPoints = 0;
    int currStart = intervals[0].start;
    int currEnd = intervals[0].end;
​
    // 4. 合并区间并计算覆盖的点
    for (int i = 1; i < numsSize; i++) {
        if (intervals[i].start <= currEnd) { // 如果有重叠
            // 扩大当前区间的结束点
            if (intervals[i].end > currEnd) {
                currEnd = intervals[i].end;
            }
        } else { // 如果没有重叠,计算当前区间的点数
            totalPoints += currEnd - currStart + 1;
            currStart = intervals[i].start;
            currEnd = intervals[i].end;
        }
    }
​
    // 添加最后一个区间的覆盖点
    totalPoints += currEnd - currStart + 1;
​
    // 释放内存
    free(intervals);
​
    return totalPoints;
}
​

时间复杂度:

1. 创建 Interval 数组:

   创建 Interval 数组的时间复杂度是 O(n),其中 n是输入的区间数量 `numsSize`。

2. 将 nums 转换为 Interval 数组:

   遍历所有区间并将其转换为 Interval 的时间复杂度同样是 O(n)。

3. 排序区间:

   使用 `qsort` 进行排序,排序的时间复杂度是 O(n log n)。

4. 合并区间并计算覆盖的点:

   遍历排好序的区间以合并并计算覆盖点的时间复杂度是 O(n)。

综上所述,主要的时间开销在于排序,因此整个 `numberOfPoints` 函数的时间复杂度为:

[O(n log n)]

 空间复杂度:

1. 存储 Interval 数组:

   创建存储 Interval 的数组需要 O(n)的额外空间。

2. 其他空间:

   在函数中使用的变量、指针等只占用常数空间 O(1),不随 n 的变化而变化。

因此,整个函数的空间复杂度主要依赖于存储 Interval 数组的开销,为:

[O(n)]

总结:

时间复杂度:(O(n log n))

空间复杂度:(O(n))​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2139775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

熵权法详细讲解+Python代码实现

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

大数据新视界 --大数据大厂之 Cassandra 分布式数据库:高可用数据存储的新选择

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

基于单片机的超声波液位检测系统(论文+源码)

1总体设计 本课题为基于单片机的超声波液位检测系统的设计&#xff0c;系统的结构框图如图2.1所示。其中包括了按键模块&#xff0c;温度检测模块&#xff0c;超声波液位检测模块&#xff0c;显示模块&#xff0c;蜂鸣器等器件设备。其中&#xff0c;采用STC89C52单片机作为主…

2.5 Trigger源码分析 -- ant-design-vue系列

Trigger源码分析 – ant-design-vue系列 1 概述 源码地址&#xff1a; https://github.com/vueComponent/ant-design-vue/blob/main/components/vc-trigger/Trigger.tsx 在源码的实现中&#xff0c;Trigger组件主要有两个作用&#xff1a; 使用Portal组件&#xff0c;把Pop…

构建响应式 Web 应用:Vue.js 基础指南

构建响应式 Web 应用&#xff1a;Vue.js 基础指南 一 . Vue 的介绍1.1 介绍1.2 好处1.3 特点 二 . Vue 的快速入门2.1 案例 1 : 快速搭建 Vue 的运行环境 , 在 div 视图中获取 Vue 中的数据2.2 案例 2 : 点击按钮执行 vue 中的函数输出 vue 中 data 的数据2.3 小结 三 . Vue 常…

Leetcode3282. 到达数组末尾的最大得分

Every day a Leetcode 题目来源&#xff1a;3282. 到达数组末尾的最大得分 解法1&#xff1a;动态规划 代码&#xff1a; class Solution { public:long long findMaximumScore(vector<int>& nums) {if (nums.size() < 1) return 0LL;int n nums.size();vect…

JavaScript高级——循环遍历加监听

本文分享到这里&#xff0c;欢迎大家评论区相互讨论学习&#xff0c;下一篇继续分享JavaScript高级学习中的闭包的内容。

linux进程间通信——学习与应用命名管道, 日志程序的使用与实现

前言&#xff1a;本节主要讲解linux进程间通信里面的命名管道&#xff0c; 命名管道和我们学过的匿名管道是类似的。 博主将会带着友友们先看一下原理&#xff0c; 然后就会着手使用以下命名管道是怎么使用的。 最后我们还会试着引入日志系统&#xff0c; 我们从本节开始就会引…

npm 安装 与 切换 淘宝镜像

一、镜像源 npm默认镜像源是国外的&#xff0c;安装依赖速度较慢&#xff0c;使用国内的镜像源速度会快一些。 1、设置淘宝镜像源&#xff1a; #最新地址 淘宝 NPM 镜像站喊你切换新域名啦! npm config set registry https://registry.npm.taobao.org&#xff08;弃用了&…

网站采用H5+CSS3开发的优势和劣势

在现代网站开发中&#xff0c;HTML5和CSS3的结合使用已经成为一种趋势。以下是其优势和劣势的介绍&#xff1a; 优势 增强的多媒体支持&#xff1a;HTML5引入了新的标签&#xff0c;使开发者能够轻松嵌入音频、视频和图形&#xff0c;无需依赖第三方插件如Flash。这大大简化了…

【AI大模型】ChatGPT模型原理介绍(下)

目录 &#x1f354; GPT-3介绍 1.1 GPT-3模型架构 1.2 GPT-3训练核心思想 1.3 GPT-3数据集 1.4 GPT-3模型的特点 1.5 GPT-3模型总结 &#x1f354; ChatGPT介绍 2.1 ChatGPT原理 2.2 什么是强化学习 2.3 ChatGPT强化学习步骤 2.4 监督调优模型 2.5 训练奖励模型 2.…

基于单片机的风机故障检测装置的设计与实现(论文+源码)

1 系统总体设计方案 通过对风机故障检测装置的设计与实现的需求、可行性进行分析&#xff0c;本设计风机故障检测装置的设计与实现的系统总体架构设计如图2-1所示&#xff0c;系统风机故障检测装置采用STM32F103单片机作为控制器&#xff0c;并通过DS18B20温度传感器、ACS712电…

macOS使用brew安装并配置python环境

1.确认已安装brew环境,如没有安装,参考: macOS系统Homebrew工具安装及使用-CSDN博客 2.安装python python安装成功 3.添加pip路径到/etc/paths 4.查看python与pip默认安装版本

【leetcode】树形结构习题

二叉树的前序遍历 返回结果&#xff1a;[‘1’, ‘2’, ‘4’, ‘5’, ‘3’, ‘6’, ‘7’] 144.二叉树的前序遍历 - 迭代算法 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,…

git 更换远程地址的方法

需要将正在开发的代码远程地址改成新的地址&#xff0c;通过查询发现有三个方法可以实现&#xff0c;特此记录。具体方法如下&#xff1a; &#xff08;1&#xff09;通过命令直接修改远程仓库地址 git remote 查看所有远程仓库git remote xxx 查看指定远程仓库地址git remote…

外卖会员卡是不是一个骗局?

大家好&#xff0c;我是鲸天科技千千&#xff0c;大家都知道我是做小程序开发的&#xff0c;平时会给大家分享一些互联网相关的创业项目&#xff0c;感兴趣的可以跟我关注一下。 首先就是要搭建一个自己的外卖会员卡系统小程序&#xff0c;我们自己的工作就是把这个小程序推广…

JDBC注册驱动及获取连接

文章目录 1. JDBC注册驱动1.1 导入驱动 Jar 包1.2 注册驱动1.2.1 API介绍1.2.2 使用步骤1.2.3 案例代码 2. 获取连接2.1 API介绍2.2 参数说明2.3 注意事项2.4 使用步骤3.5 案例代码 1. JDBC注册驱动 Connection表示Java程序与数据库之间的连接&#xff0c;只有拿到Connection才…

TCP/IP网络模型分层

应用层 应用层是最上层的&#xff0c;也就是我们能直接接触到的就是应用层(Application Layer),手机和电脑上的应用软件都是在应用层实现。当两个不同设备的应用需要通信的时候&#xff0c;应用就会把数据传输给下一层&#xff0c;也就是传输层 所以&#xff0c;应用层只需要…

PMP--一模--解题--91-100

文章目录 13.干系人管理91、 [单选] 在项目执行期间&#xff0c;一名外部干系人反对一项重大范围变更。除非重新评估干系人的决定&#xff0c;否则项目进展将受到影响。项目经理下一步该怎么做&#xff1f; 5.范围管理92、 [单选] 一客户给你一复杂项目的采购工作说明书&#x…

「数组」堆排序 / 大根堆优化(C++)

目录 概述 核心概念&#xff1a;堆 堆结构 数组存堆 思路 算法过程 up() down() Code 优化方案 大根堆优化 Code(pro) 复杂度 总结 概述 在「数组」快速排序 / 随机值优化|小区间插入优化&#xff08;C&#xff09;中&#xff0c;我们介绍了三种基本排序中的冒泡…