Leetcod面试经典150题刷题记录 —— 区间篇

Leetcod面试经典150题刷题记录 —— 区间篇

    • 1. 汇总区间
    • 2. 合并区间
    • 3. 插入区间
    • 4. 用最少数量的箭引爆气球

1. 汇总区间

题目链接:汇总区间 - leetcode
题目描述:
给定一个 无重复元素 的 有序 整数数组 nums 。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。列表中的每个区间范围 [a,b] 应该按如下格式输出:
"a->b" ,如果 a != b
"a" ,如果 a == b

示例 1:
输入:nums = [0,1,2,4,5,7]
输出:[“0->2”,“4->5”,“7”]
解释:区间范围是:
[0,2] --> “0->2”
[4,5] --> “4->5”
[7,7] --> “7”
示例 2:
输入:nums = [0,2,3,4,6,8,9]
输出:[“0”,“2->4”,“6”,“8->9”]
解释:区间范围是:
[0,0] --> “0”
[2,4] --> “2->4”
[6,6] --> “6”
[8,9] --> “8->9”

题目归纳:

解题思路:
(1) 解法: 汇总区间 - leetcode官方题解

class Solution:def summaryRanges(self, nums: List[int]) -> List[str]:# 给定一个整数数组,满足以下性质# (1)无重复元素# (2)有序# 请返回 恰好覆盖数组中所有数字 的 最小有序区间范围列表,也就是说,nums的每个元素都恰好被某个区间范围所覆盖,且不存在属于某个范围,但不属于nums的数字x# demo1# 输入:nums = [0,1,2,4,5,7]# 输出:["0->2","4->5","7"]# demo2# 输入:nums = [0,2,3,4,6,8,9]# 输出:["0","2->4","6","8->9"]# 理解题意并不困难,这个章节是使用区间来求解题目,那么这道题要如何使用区间呢?# 从下标0出发,向右遍历,每次遇到相邻元素差值>1, 即找到了一个区间,遍历完数组后,则能得到一系列区间列表。# low记录区间起点,high记录区间终点# low < high,字符串表示为"low->high"# low = high, 字符串表示为"low"或"high"ans = []i = 0n = len(nums)while i < n:low = ii += 1while i < n and nums[i] == nums[i-1]+1: # 连续的有序区间i += 1high = i-1region = str(nums[low])if low < high:region = region + "->"region = region + str(nums[high])ans.append(region)return ans

2. 合并区间

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

示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

题目归纳:
题意理解起来较容易。

解题思路:
解法: 合并区间 - leetcode官方题解

class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:# 排序法# 按区间左端点进行排序,那么在排完序的列表中,可合并的区间一定连续# 用数组merged存储最终答案# (1)将列表中的区间,按左端点升序排序,然后将第一个区间加入merged数组中,并按顺序依次考虑之后的每个区间# (2)若当前区间的左端点,在数组merged中最后一个区间的右断点之后,那么这两个区间不会重合,可直接将该区间加入数组merged的末尾#    否则,它们重合,用当前区间的右端点,更行数组merged中最后一个区间的右端点,取二者最大值即max(current_interval_r, last_interval_r)intervals.sort(key=lambda x: x[0]) # 以x[0]为排序的关键字merged = []for interval in intervals:# (1)如果merged为空,或,当前区间与merged最后一个区间不重合,可直接添加if not merged or merged[-1][1] < interval[0]: # merged[-1][1]最后一个区间的右端点 < 当前区间的左端点merged.append(interval)else: # (2)可以合并,并更新最后一个区间的右端点merged[-1][1] = max(merged[-1][1], interval[1])return merged

3. 插入区间

题目链接:插入区间 - leetcode
题目描述:
给你一个 无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
题目归纳:

解题思路:
解法: 插入区间 - leetcode官方题解

class Solution:def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:# 和上一题合并区间一脉相承# 题目描述:给一个无重叠的,按区间左端点排序的区间列表,往列表插入一个新区间,需要保证列表中的区间仍然有序且不重叠# 算法过程# (1)找出所有与区间newInterval重叠的区间,记为X# (2)将X中所有区间连带newInterval合并成一个大区间BIG_X# (3)最终答案即为:合并后的BIG_X + 不与X重叠的区间# 重叠的分类讨论# 考虑两个区间:S1=[l1, r1], S2=[l2, r2]# 若:# r1 < l2 or r2 < l1: 无重叠# 不符合(r1 < l2 or r2 < l1): 有重叠left, right = newInterval[0], newInterval[1]placed = False       # 是否将合并后的区间放入答案ans = []for li,ri in intervals:if ri < left:    # 当前区间在newInterval的左侧ans.append([li, ri])elif right < li: # 当前区间在newInterval的右侧if not placed:ans.append([left, right])placed = Trueans.append([li, ri])else:            # 存在交集,计算区间并集,不会往ans中添加内容left = min(left, li)right = max(right, ri)if not placed:       # 数组为空或合并到区间数组的末尾仍未放置ans.append([left, right])return ans

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

题目链接:用最少数量的箭引爆气球 - leetcode
题目描述:
有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstartxend之间的气球。你不知道气球的确切 y 坐标。

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

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

题目归纳:

解题思路:
解法: 用最少数量的箭引爆气球 - leetcode官方题解
记区间左端点为 x i x_i xi,右端点为 y i y_i yi
(1)对数组按区间右端点,升序排序。
(2)每只箭都对准,当前右端点 y i y_i yi最靠左的气球,即射出位置 p o s = m i n ( y i ) pos = min(y_i) pos=min(yi)
(3)下一只箭瞄准的气球是,第一个 x i x_i xi大于上次射出 p o s pos pos的气球,射出位置是该气球的 y i y_i yi

class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:# 第一种解法还用到了burst数组,这里的解法利用数组的有序特性,一次遍历即可if not points:return 0points.sort(key=lambda balloon:balloon[1]) # 按右端点升序排列pos = points[0][1]          # 第1个瞄准的气球的右端点ans = 1                     # 第1只箭for i in range(1, len(points)):if points[i][0] > pos : # 找到了下一只箭瞄准的气球ans += 1pos = points[i][1]  # 瞄准该气球的右端点return ans

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

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

相关文章

算法导论复习纲要

函数 1. 上界下界&#xff0c;紧确界的定义 2. 求解递推式&#xff0c;代入法&#xff0c;递归树法&#xff0c;主方法 分治算法 动态规划 1. 切割钢条&#xff1a;递归方法&#xff0c;动态的自上而下&#xff0c; 2. 矩阵乘法&#xff1a;最优子结构性的证明&#xff0c…

Go语言学习

1、运行和解析 go run 命令已包含了编译和运行。它会先在一个临时目录编译程序&#xff0c;然后执行完后清理掉. 如果在run的后面加上 --work参数来查看临时目录。 go run --work main.go也可以通过go build命令来编译代码&#xff0c;执行后会生成一个可以执行文件&#xff…

HIVE笔记

表关联 内连接&#xff08;INNER JOIN&#xff09; 返回两个表中满足关联条件的记录。 SELECT * FROM t1 INNER JOIN t2 ON t1.col1 t2.col2;左连接&#xff08;LEFT JOIN&#xff09; 返回左表中的所有记录&#xff0c;以及右表中满足关联条件的记录。 SELECT * FRO…

如何本地部署Nextcloud结合cpolar搭建专属私有云盘远程访问(内网穿透)

文章目录 摘要1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 摘要 Nextcloud,它是ownCloud的一个分支,是一个文件共享服…

如何用matlab制作游戏?

在MATLAB中制作游戏可以采用图形用户界面&#xff08;GUI&#xff09;或使用MATLAB的绘图和交互功能。以下是一些制作游戏的基本步骤&#xff1a; 使用 MATLAB GUI 制作游戏 打开 GUIDE&#xff08;GUI 开发环境&#xff09; 打开 MATLAB 并在命令行中输入 guide 打开 GUIDE。…

使用Rollup 搭建开发环境

1 什么是Rollup Rollup 是一个用于 JavaScript 的模块打包工具&#xff0c;它将小的代码片段编译成更大、更复杂的代码&#xff0c;例如库或应用程序。它使用 JavaScript 的 ES6 版本中包含的新标准化代码模块格式&#xff0c;而不是以前的 CommonJS 和 AMD 等特殊解决方案。(开…

算法设计与分析 | 矩阵连乘

题目描述 一个n*m矩阵由n行m列共n*m个数排列而成。两个矩阵A和B可以相乘当且仅当A的列数等于B的行数。一个N*M的矩阵乘以一个M*P的矩阵等于一个N*P的矩阵&#xff0c;运算量为nmp。 矩阵乘法满足结合律&#xff0c;A*B*C可以表示成(A*B)*C或者是A*(B*C)&#xff0c;两者的运算…

linux安装maven3.8.8官网下载安装

步骤 1&#xff1a;下载 Maven 安装包 打开浏览器&#xff0c;访问 Maven 官方网站&#xff1a;https://maven.apache.org/download.cgi在页面上找到最新的稳定版本的 Maven&#xff0c;复制下载链接。 步骤 2&#xff1a;使用终端下载 Maven 安装包 打开终端&#xff0c;使…

什么是https证书?

HTTPS证书&#xff0c;也称为SSL&#xff08;Secure Sockets Layer&#xff09;证书或TLS&#xff08;Transport Layer Security&#xff09;证书&#xff0c;是一种数字证书&#xff0c;用于在网络上建立安全的加密连接。它的主要目的是确保在互联网上进行的数据传输的安全性和…

Linux空间不足处理

目录 临时处理 杀死没在使用的后台进程&#xff08;某些进程可能会占用几十个G的空间&#xff09; 手动释放空间 清理/tmp/ray目录 永久处理 将文件挪至空间充足的挂载盘 将软件挪至空间充足的挂载盘&#xff0c;在原目录创建软链接 临时处理 杀死没在使用的后台进程&a…

Android : 画布绘制矩形和文字 让其居中显示简单应用

示例图&#xff1a; CenterView.java package com.example.demo;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.Log; import android.view.View;public class Center…

Android 12 Token 机制

一、前言 在 android framework 框架中 activity 和 window 是相互关联的&#xff0c;而他们的管理者 AMS 和 WMS 是怎么来实现这种关联关系的&#xff0c;答案就是通过 token。 首先大家需要了解一下 LayoutParams&#xff0c;当然属性很多&#xff0c;简单了解即可&#xf…

深入理解ArkTS:Harmony OS 应用开发语言 TypeScript 的基础语法和关键特性

文章目录 前言TypeScript语法变量声明条件控制循环迭代函数类和接口模块开发文章总结要点总结前言 Harmony OS应用开发的主力语言ArkTS的前身TS语言的基本语法。通过学习变量的声明和数据类型、条件控制、函数声明、循环迭代等基本知识,并了解内核接口的声明和使用。同时还介…

openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作示例

文章目录 openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作示例175.1 相同表的INSERT和DELETE并发175.2 相同表的并发INSERT175.3 相同表的并发UPDATE175.4 数据导入和查询的并发 openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入…

redis开启密码验证

开启密码验证 &#xff08;1&#xff09;配置文件中设置 redis.conf文件里面配置requirepass参数&#xff0c;redis认证密码&#xff1a;foobared&#xff0c;然后重启redis服务 ./redis-cli 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> CONFIG SET requi…

训练和测试的loss、accuracy等数据保存到文件并读出

首先是写文件到excel import os.path from openpyxl import load_workbook import pandas as pd import matplotlib.pyplot as pltdef write_excel(excel_name, sheet_name, value):columns ["epoc", "train_loss", "train_acc", "test_a…

跟着野火学FreeRTOS:第一段(任务延时列表)

既然是延时列表&#xff0c;那肯定要先定义相应的链表&#xff0c;延时列表的定义如下。这里定义了两条延时列表&#xff08;其实就是前面小节里面提到的链表的根节点&#xff09;&#xff0c;一条是准备当记录 S y s t i c k Systick Systick周期个数的变量 x T i c k C o u n…

idea Spring Boot项目使用JPA创建与数据库链接

1.pom.xml文件中添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>…

创建和配置Spring MVC框架构建Web应用

1 认识Spring MVC Spring Web MVC是构建在Servlet API之上的Web框架&#xff0c;自诞生之时就被纳入了Spring框架中。其正式/官方名称为“Spring Web MVC”&#xff0c;源自其所属的模块&#xff08;spring-webmvc&#xff09;&#xff0c;但通常被称为“Spring MVC”。 1.1…

最短路径(数据结构实训)(难度系数100)

最短路径 描述&#xff1a; 已知一个城市的交通路线&#xff0c;经常要求从某一点出发到各地方的最短路径。例如有如下交通图&#xff1a; 则从A出发到各点的最短路径分别为&#xff1a; B&#xff1a;0 C&#xff1a;10 D&#xff1a;50 E&#xff1a;30 F&#xff1a;60 输…