当前位置: 首页 > news >正文

【LeetCode-经典面试150题-day11】

目录

128.最长连续序列

 228.汇总区间

 56.合并区间

 57.插入区间

 452.用最少数量的箭引爆气球


 

128.最长连续序列

题意:

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

【输入样例】

nums = [100,4,200,1,3,2]

【输出样例】

4

解释:最长数字连续序列是[1,2,3,4]

解题思路:哈希表

1. 使用set,set不包含重复元素;因此我们先将nums中的元素存入到set中,实现一个去重效果。

2. 遍历set,当一个数num的前一位数num-1不在数组中时,表示它可能是连续序列的第一位,持续遍历看他的下一位num+1是否在集合中,如果存在统计长度,直至找不到。

class Solution {public int longestConsecutive(int[] nums) {int count = 0;Set<Integer> numSet = new HashSet<>();for(int num : nums){numSet.add(num);}int tempCount;for(int num : numSet){if(!numSet.contains(num-1)){tempCount = 1;//第一个数while(numSet.contains(++num)){++tempCount;//继续查找}count = Math.max(count,tempCount);}}return count;}
}

时间: 击败了84.51%

内存: 击败了89.54%

 228.汇总区间

题意:

给定一个  无重复元素 的 有序 整数数组 nums 。

返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。

列表中的每个区间范围 [a,b] 应该按如下格式输出:

  • "a->b" ,如果 a != b
  • "a" ,如果 a == b

【输入样例】

nums = [0,1,2,4,5,7]

【输出样例】

["0->2","4->5","7"]

解题思路:枚举

class Solution {public List<String> summaryRanges(int[] nums) {List<String> list = new ArrayList<>();if(nums.length == 0){return list;}if(nums.length == 1){list.add(String.valueOf(nums[0]));return list;}int i=0;while(i < nums.length){int low = i;++i;while(i<nums.length && nums[i] == nums[i-1]+1){++i;}int high = i-1;String str;if(low == high){str = String.valueOf(nums[low]);}else{str = nums[low]+"->"+nums[high];}list.add(str);}return list;}
}

时间: 击败了51.34%

内存: 击败了16.07%

 56.合并区间

题意:

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

【输入样例】

intervals = [[1,3],[2,6],[8,10],[15,18]]

【输出样例】

[[1,6],[8,10],[15,18]]

解题思路:排序+枚举判断

1.首先,按照给出的二维数组的左区间进行升序排序

2.枚举判断,变量leftBound和rightBound记录当前的左边界和右边界;枚举,如果下一个区间的左边界小于当前的rightBound,证明两个区间可以合并在一起,修改右边界(不是盲目的修改,要修改成较大值,如(1,6),(2,4),直接修改会变成(1,4),所以要判断);如果下一个区间的左边界大于rightBound,证明当前的区间没法合并了,添加到数组中。

class Solution {public int[][] merge(int[][] intervals) {List<int[]> res = new ArrayList<>();    //按照左边界排序Arrays.sort(intervals, (x,y)-> Integer.compare(x[0],y[0]));//initial start 是最小左边界int leftBound = intervals[0][0];int rightBound = intervals[0][1];//右边界for(int i=1;i< intervals.length;++i){//如果左边界大于上一个有边界if(intervals[i][0] > rightBound){//加入区间,更新start,加入的是上一个区间res.add(new int[]{leftBound,rightBound});leftBound = intervals[i][0];rightBound = intervals[i][1];}else{//更新右边界rightBound = Math.max(rightBound, intervals[i][1]);}}res.add(new int[]{leftBound,rightBound});return res.toArray(new int[res.size()][]);}
}

时间: 击败了80.99%

内存: 击败了92.51%

 57.插入区间

题意:

给你一个 无重叠的 ,按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

【输入样例】

intervals = [[1,3],[6,9]], newInterval = [2,5]

【输出样例】

[[1,5],[6,9]]

解题思路:与上一题类似,但是这一题不需要排序

枚举原区间,考虑四种情况:

1. 当原区间第i个元素的右边界小于插入区间的左边界时,直接插入原区间第i个元素;

2.当原区间第i个元素的左边界大于插入区间的右边界时,插入新区间,并标注已经插入,后续判断到此情况时直接添加原区间的元素;

3.第三种情况时除了1,2外的情形,代表原区间第i个元素与插入区间有重叠,通过判断两个区间的最大值和最小值来更新左右区间。

4. 最后一种情况时原区间已经遍历完毕后,新区间还没插入,直接插入到最后。

class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {boolean isInsert = false;//是否已经插入List<int[]> list = new ArrayList<>();int leftBounds = newInterval[0];//新区间的左边界int rightBounds = newInterval[1];//新区间的右边界for(int i=0;i<intervals.length;++i){if(intervals[i][0] > rightBounds){if(!isInsert){list.add(new int[]{leftBounds,rightBounds});isInsert = true;}list.add(new int[]{intervals[i][0],intervals[i][1]});}else if(intervals[i][1] < leftBounds){//在插入区间的左侧list.add(new int[]{intervals[i][0],intervals[i][1]});}else{//有交集,要合并区间leftBounds = Math.min(leftBounds,intervals[i][0]);rightBounds = Math.max(rightBounds,intervals[i][1]);}}//如果遍历完还没有插入,添加到最后if(!isInsert){list.add(new int[]{leftBounds,rightBounds});}return list.toArray(new int[list.size()][]);}
}

时间: 击败了97.50%

内存: 击败了67.95%

 452.用最少数量的箭引爆气球

题意:

有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。

一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstartxend, 且满足  xstart ≤ x ≤ xend,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。

给你一个数组 points ,返回引爆所有气球所必须射出的 最小 弓箭数 

提示:

  • 1 <= points.length <= 105
  • points[i].length == 2
  • -231 <= xstart < xend <= 231 - 1

【输入样例】

points = [[10,16],[2,8],[1,6],[7,12]]

【输出样例】

2

解题思路:与56.合并区间类似,区别是现在更新右边界的时候,要按小的来。

class Solution {public int findMinArrowShots(int[][] points) {  //按照左边界排序Arrays.sort(points, (x,y)-> Integer.compare(x[0],y[0]));int result = 1;for(int i=1;i< points.length;++i){//如果左边界大于上一个有边界if(points[i][0] > points[i-1][1]){//加入区间,更新start,加入的是上一个区间++result;}else{//更新右边界points[i][1] = Math.min(points[i-1][1], points[i][1]);}}// int result = res.size;return result;}
}

时间: 击败了18.88%

内存: 击败了82.02%

相关文章:

【LeetCode-经典面试150题-day11】

目录 128.最长连续序列 228.汇总区间 56.合并区间 57.插入区间 452.用最少数量的箭引爆气球 128.最长连续序列 题意&#xff1a; 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并…...

深度学习入门(三):卷积神经网络(CNN)

引入 给定一张图片&#xff0c;计算机需要模型判断图里的东西是什么&#xff1f; &#xff08;car、truck、airplane、ship、horse&#xff09; 一、卷积神经网络整体架构 CONV&#xff1a;卷积计算层&#xff0c;线性乘积求和RELU&#xff1a;激励层&#xff0c;激活函数P…...

网站是如何识别网络爬虫的?

在爬取数据时&#xff0c;你常常会遇到各种网站的反爬机制。网站是如何检测和拦截网络爬虫的呢&#xff1f;本文将为你揭秘网站使用的几种常见的反爬手段&#xff0c;并为你提供一些解决方案&#xff0c;助你越过反爬壁垒&#xff0c;提升你的实际操作效率。 一、Cookie检测 …...

TP-Link 智能灯泡缺陷能让黑客窃取用户 WiFi 密码

来自意大利和英国的研究人员在 TP-Link Tapo L530E 智能灯泡和 TP-Link Tapo 应用程序中发现了4个漏洞&#xff0c;攻击者可以利用这些漏洞窃取目标的 WiFi 密码。 TP-Link Tapo L530E 是包括亚马逊在内的多个市场上最畅销的智能灯泡。TP-link Tapo是一款智能设备管理应用程序…...

接口测试,如何测试?

一 入参 1 正常的入参 输入正常的参数&#xff0c;响应按照接口文档的约定正常返回。 2 异常的入参 参数异常包括&#xff1a;参数为空&#xff0c;多参或少参&#xff0c;错误的参数数据&#xff1b; 错误的参数数据&#xff1a;数据类型错误、非空参数为空&#xff0c;长…...

React源码解析18(11)------ 实现多次setState的批处理

摘要 在React中&#xff0c;如果涉及到了多次setState&#xff0c;组件render几次。setState是同步的还是异步的。这是一个很常见的面试题。 而本篇文章&#xff0c;就是主要实现React中&#xff0c;对于这部分的性能优化&#xff0c;我们称之为批处理。例如当我有下面的JSX。…...

评测凯迪仕K70「千里眼」智能锁:不忘安全初心,便捷体验更上一层

能打败凯迪仕的&#xff0c;只有它自己。这是我们在体验过凯迪仕最新旗舰产品K70「千里眼」智能锁之后的感受。作为凯迪仕2023年最新旗舰机型&#xff0c;K70「千里眼」智能锁在配置上可以说是「机皇」般的存在。3K超高清智能锁猫眼、车规级24GHz雷达、大小双屏设计、三方可视对…...

mysql数据库root密码遗忘后,修改root密码

目录 方式一&#xff1a; 方式二&#xff1a; 2.1 也可以像我这样&#xff0c;普通用户登录进去后 2.2 执行如下命令&#xff0c;将已知的user1的加密密文更新到root中 2.3 查询数据库 2.4 用root用户登录 2.5 登录正常&#xff0c;但这会root登录进去后&#xff0c;无法…...

网络安全(黑客)快速入门~

网络安全的学习需要遵守循序渐进&#xff0c;由浅入深。 通常网络安全学习方法有两种&#xff1a; 方法1&#xff1a;先学习编程&#xff0c;然后学习Web渗透及工具使用等&#xff1b; 适用人群&#xff1a;有一定的代码基础的小伙伴 基础部分 基础部分需要学习以下内容&am…...

华为OD机试 - 数字颠倒(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、Java算法源码投机取巧七、效果展示 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&am…...

leetcode做题笔记87扰乱字符串

使用下面描述的算法可以扰乱字符串 s 得到字符串 t &#xff1a; 如果字符串的长度为 1 &#xff0c;算法停止如果字符串的长度 > 1 &#xff0c;执行下述步骤&#xff1a; 在一个随机下标处将字符串分割成两个非空的子字符串。即&#xff0c;如果已知字符串 s &#xff0c…...

第一章 初识Linux(含VMware安装Ubuntu、CentOS、Windows、FinalShell、快照)

目录 一、 课程的介绍  1.为什么要学习Linux  2.课程的安排  3.如何学习Linux 二、操作系统概述  1.学习目标  2.计算机的硬件和软件  3.什么是操作系统  4.常见的操作系统  5.本小节的总结 三、初识Linux  1.学习目标  2.Linux的诞生  3.Linux的内核  …...

MATLAB算法实战应用案例精讲-【图像处理】OCR识别方法-CRNN

目录 OCR综述 什么是OCR OCR发展历程 OCR 常用检测方法 基于回归的方法 1) box回归...

无涯教程-PHP - preg_grep()函数

preg_grep() - 语法 array preg_grep ( string $pattern, array $input [, int $flags] ); 返回由与给定模式匹配的输入数组元素组成的数组。 如果将flag设置为PREG_GREP_INVERT&#xff0c;则此函数返回输入数组中与给定模式不匹配的元素。 preg_grep() - 返回值 返回使用…...

【Linux】Nginx解决跨域问题

文章目录 一、跨域问题二、解决跨域问题三、结尾 一、跨域问题 在前后端分离的项目中&#xff0c;前端通常运行在一个域名或端口上&#xff0c;而后端运行在另一个域名或端口上。当浏览器发起跨域请求时&#xff0c;即前端页面向后端发送请求的域名、端口或协议与当前页面的域…...

无涯教程-PHP - preg_split()函数

preg_split() - 语法 array preg_split (string pattern, string string [, int limit [, int flags]]); preg_split()函数的操作与split()完全相同&#xff0c;只不过正则表达式被接受为pattern的输入参数。 如果指定了可选的输入参数limit&#xff0c;则仅返回子字符串的限…...

B. Spreadsheets

Problem - B - Codeforces 问题描述&#xff1a;excel有两种情况&#xff0c; Rr_nCc_n&#xff1a;R行数C列数ZZZ(列数)行数。 对这两个进行相互转换。 细节&#xff1a; 准确判断这两种情况 string str; cin>>str; auto posR str.find("R"), posC st…...

matlab面向对象

一、面向对象编程 1.1 面向过程与面向对象 区别&#xff1a; 面向过程的核心是一系列函数&#xff0c;执行过程是依次使用每个函数面向对象的核心是对象&#xff08;类&#xff09;及其属性、方法&#xff0c;每个对象根据需求执行自己的方法以解决问题 对象&#xff1a;单个…...

01、Cannot resolve MVC View ‘xxxxx前端页面‘

Cannot resolve MVC View ‘xxxxx前端页面’ 没有找到对应的mvc的前端页面。 代码&#xff1a;前端这里引入了 thymeleaf 模板 解决&#xff1a; 需要添加 thymeleaf 的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>s…...

时空智友企业流程化管控系统文件上传漏洞复现

0x01 产品简介 时空智友企业流程化管控系统是一个功能丰富、灵活可定制的企业管理工具。通过该系统&#xff0c;企业能够实现流程的自动化、协同的提升、数据的洞察和决策的优化&#xff0c;从而提高工作效率、管理水平和企业竞争力。 0x02 漏洞概述 时空智友企业流程化管控系…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...