【每日一题】拼车+【差分数组】

文章目录

  • Tag
  • 题目来源
  • 解题思路
    • 方法一:差分
  • 写在最后

Tag

【差分数组】【数组】【2023-12-02】


题目来源

1094. 拼车


解题思路

本题朴素的解题思路是统计题目中提到的每一个站点的车上人数,如果某个站点的车上人数大于车上的座位数直接返回 false,如果直到行程结束都没有返回 false,则直接返回 true。朴素方法的时间复杂度为 O ( n 2 ) O(n^2) O(n2) n n n 最大为 1000,该方法时间复杂度较高但是可以通过本题。

接下来将会介绍一种时间复杂度较优的方法,时间复杂度为 O ( n + U ) O(n + U) O(n+U)

方法一:差分

我们先来看一下,朴素方法的实现代码:

class Solution {
public:bool carPooling(vector<vector<int>>& trips, int capacity) {vector<int> peoples(10010);for (auto trip : trips) {for (int i = trip[1]; i < trip[2]; ++i) {peoples[i] += trip[0];if (peoples[i] > capacity) {return false;}}}return true;}
};

注意观察朴素解法中对于数组 peoples 的更新,我们枚举并更新所有站点的车上人数,朴素方法的时间复杂度较高的原因就是此处的嵌套枚举更新人数。此处可以使用【差分数组】来优化时间复杂度。

什么是差分数组?

差分数组是一个与原数组长度相同的数组,其中,除了首元素,其余的每个元素都是原数组中相邻两个元素的差值。比如数组 arr = [1, 4, 5, 6] 的差分数组 diff = [1, 3, 1, 1],数组 arr[i] = diff[0, ..., i],即原数组 arr 中的第 i 个元素等于差分数组 diff0 到第 i 个元素之和。

时间是如何优化的?

对于某一段旅行有 numPassengers 乘客,乘客上车点为 from,下车点为 to,这一段旅程的我们只需要更新差分数数组的两个位置对应的值,即更新乘客上车点 diff[from] += numPaaengers, 更新乘客下车点 diff[to] -= numPaaengers。此时的时间复杂度为 O ( 2 × n ) = O ( n ) O(2 \times n) = O(n) O(2×n)=O(n) n n n 为数组 trips 的长度。

然后,利用差分数组累加得到每个站点的车上人数,并与 capacity 比较,… 此处的时间复杂度为 O ( U ) O(U) O(U) U = m a x ( t o i ) U = max(to_i) U=max(toi)

我们借助差分数组将嵌套枚举转化为了两个线性枚举,大大降低了时间复杂度。

实现代码

class Solution {
public:bool carPooling(vector<vector<int>>& trips, int capacity) {int d[1001];memset(d, 0, sizeof(d));for (auto trip : trips) {int num = trip[0], from = trip[1], to = trip[2];d[from] += num;d[to] -= num;}int s = 0;for (int v : d) {s += v;if (s > capacity) {return false;}}return true;}
};

复杂度分析

时间复杂度: O ( n + U ) O(n + U) O(n+U) n n n 为数组 trips 的长度, U = m a x ( t o i ) U = max(to_i) U=max(toi)

空间复杂度: O ( U ) O(U) O(U)


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

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

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

相关文章

SSE4.2 指令集内置函数来加速32位循环冗余校验(CRC-32)计算

1、_mm_crc32_u8 为什么比查表快&#xff1f; _mm_crc32_u8 指令使用了 SIMD 技术&#xff08;即单指令多数据流技术&#xff09;&#xff0c;可以同时处理多个字节的数据。这些字节被打包成 64 位整数&#xff0c;然后使用单条 _mm_crc32_u64 指令计算它们的 CRC-32 校验和。…

基于 Vue、Datav、Echart 框架的 “ 数据大屏项目 “,通过 Vue 组件实现数据动态刷新渲染,内部图表可实现自由替换

最近在研究大数据分析&#xff0c;基于 Vue、Datav、Echart 框架的 " 数据大屏项目 "&#xff0c;通过 Vue 组件实现数据动态刷新渲染&#xff0c;内部图表可实现自由替换。部分图表使用 DataV 自带组件&#xff0c;可进行更改&#xff0c;详情请点击下方 DataV 文档…

flask中遇到ImportError: cannot import name ‘url_encode‘ from ‘werkzeug‘

报错信息 Traceback (most recent call last): File “book_management_sys.py”, line 5, in from forms import Login, SearchBookForm, ChangePasswordForm, EditInfoForm, SearchStudentForm, NewStoreForm, StoreForm, BorrowForm File “C:\pythonProject\pythonProject…

abapgit 安装及使用

abapgit 需求 SA[ BASIS 版本 702 及以上 版本查看路径如下&#xff1a; 安装步骤如下&#xff1a; 1. 下载abapgit 独立版本 程序 链接如下&#xff1a;raw.githubusercontent.com/abapGit/build/main/zabapgit_standalone.prog.abap 2.安装开发版本 2.1 在线安装 前置条…

【C++】类和对象——初始化列表和static修饰成员

首先我们来谈一下初始化列表&#xff0c;它其实是对于我们前边构造函数体内初始化的一种补充&#xff0c;换一种说法&#xff0c;它以后才是我们构造函数的主体部分。 我们先考虑一个问题&#xff0c;就是一个类里面有用引用或const初始化的成员变量&#xff0c;比如说&#xf…

HTML_web扩展标签

1.表格标签 2.增强表头表现 4.表格属性&#xff08;实际不常用&#xff09; 结构标签&#xff1a; 合并单元格&#xff1a; 更多请查看主页

从零开始,探索Spring框架的魅力与实践

Spring 1&#xff0c;介绍1.1 为什么要学?1.2 学什么? 2&#xff0c;Spring相关概念2.1 初识Spring2.1.1 Spring家族2.1.2 了解Spring发展史 2.2 Spring系统架构2.2.1 系统架构图2.2.2 spring主要内容 2.3 Spring核心概念2.3.1 目前项目中的问题2.3.2 IOC、IOC容器、Bean、DI…

影刀实例五,网页表单中多下拉框填写问题

一&#xff0c;背景 网页表单中&#xff0c;经常有这样一个场景&#xff0c;填写籍贯.并且是以三个下拉框表示&#xff0c;分别代表省&#xff0c;市&#xff0c;县.并且都是非标准的&#xff0c;不能直接使用影刀内置命令.常规思路是&#xff1a;分别处理省&#xff0c;市&…

万能的视频格式播放器

今天博主给大家带来一款“万能”的视频播放器——VLC Media Player&#xff0c;支持的文件格式非常多&#xff0c;大家快来一起看看吧&#xff01; VLC Media Player 是一款可播放大多数格式&#xff0c;而无需安装编解码器包的媒体播放器。可以播放 MPEG-1、MPEG-2、MPEG-4、D…

C语言-指针_02

指针-02 1. 指针的指针 概念&#xff1a;指针变量中存储的是指针的地址&#xff0c;又名 二维指针 语法&#xff1a; 数据类型 **p;示例&#xff1a; #include <stdio.h> int main(int argc, char const *argv[]) {int num 10;int *p1 &num;int **p2 &p1…

Java八股文面试全套真题【含答案】-Web前端篇

以下是一些关于JavaScript语言的经典面试题以及它们的答案&#xff1a; JavaScript的数据类型有哪些&#xff1f;它们的特点是什么&#xff1f; 答案&#xff1a;JavaScript的数据类型包括基本数据类型&#xff08;undefined、null、boolean、number、string&#xff09;和引用…

Python Flask 框架开发

1. Python 代码示例&#xff08;使用 Flask 框架&#xff09; 1.1 安装依赖库 pip install flask flask_sqlalchemy flask_login flask_wtf 1.2 主应用文件 app.py from flask import Flask, request, jsonify, redirect, url_for, render_template, flash from flask_sqla…

深度学习——第1章 深度学习的概念及神经网络的工作原理

1.1 序言——探索智能机器 千百年来&#xff0c;人类试图了解智能的机制&#xff0c;并将它复制到思维机器上。 人类从不满足于让机械或电子设备帮助做一些简单的任务&#xff0c;例如使用滑轮吊起沉重的岩石&#xff0c;使用计算器做算术。 人类希望计算机能够自动化执行更…

医美店会员管理系统预约小程序作用是什么

医美在美业中占据着一定地位&#xff0c;爱美使然和经济独立、悦己消费下&#xff0c;不少女性会前往医美机构做脸部整容、嫩肤补水等服务&#xff0c;如美容院一样都是具备本地外地属性的&#xff0c;因此在如今互联网盛行下&#xff0c;商家需要借势线上破解难题及增强生意效…

【预测工具】不须编码的预测和数据可视化工具

有一天&#xff0c;我的同事问我&#xff0c;他应该如何做一个快速预测模型而不是Excel&#xff0c;并产生比线性回归或Excel图中的那些简单方程更好的结果。这是我的答案。 TableCurve 2D (Image by author) Sigmaplot很早以前就推出了这个软件。它已被广泛用于在数据中寻找最…

Structured Streaming: Apache Spark的流处理引擎

欢迎来到我们的技术博客&#xff01;今天&#xff0c;我们要探讨的主题是Apache Spark的一个核心组件——Structured Streaming。作为一个可扩展且容错的流处理引擎&#xff0c;Structured Streaming使得处理实时数据流变得更加高效和简便。 什么是Structured Streaming&#…

【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(2)后端跨域、登录模块、springboot分层架构、IDEA修改快捷键、vue代码风格

项目笔记为项目总结笔记,若有错误欢迎指出哟~ 【项目专栏】 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)spring boot项目搭建、vue项目搭建、微信小程序项目搭建 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(2)后端跨域、登录模块、sp…

python 图书馆选座小程序源码

开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索房间&#xff0c;轮播图&#xff0…

wordpress安装之Linux解压缩安装

本次教程是为了让大家少走弯路&#xff0c;可以更直观的去认识我们不懂的知识面。 首先我们安装解压缩的软件 命令如下&#xff1a; yum install -y unzip 上一篇我们讲到传输文件了 这篇我们把传输过来的压缩包解压并进行安装。follow me&#xff01; 我们输入命令 unzi…

FDM3D打印系列——天秤座黄金圣斗士模型制作全过程视频

FDM打印天秤座黄金圣斗士全过程视频 大家好&#xff0c;我是阿赵。   这次带来的是天秤座黄金圣斗士模型的3D打印加后期加工的全过程。其实打印的过程之前都已经介绍过了&#xff0c;不过有朋友说想实际看看整个制作过程是怎样&#xff0c;所以我录了这个视频。   上完色之…