力扣热门算法题 56. 合并区间,57. 插入区间,58. 最后一个单词的长度v

56. 合并区间,57. 插入区间,58. 最后一个单词的长度,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.20 可通过leetcode所有测试用例。

目录

56. 合并区间

解题思路

完整代码

Python

Java

​编辑

57. 插入区间

解题思路

完整代码

Python

Java

58. 最后一个单词的长度

解题思路

完整代码

Python

Java


56. 合并区间

以数组 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] 可被视为重叠区间。

解题思路

  1. 排序:首先按照每个区间的起始位置对所有区间进行排序,这样可以保证我们在处理区间时是按照顺序来的,便于合并。
  2. 合并区间:初始化一个空的结果数组,然后遍历排序后的区间。对于每个区间,如果结果数组为空或者当前区间的起始位置大于结果数组中最后一个区间的结束位置,就直接将当前区间添加到结果数组中。否则,如果当前区间与结果数组中最后一个区间有重叠(即当前区间的起始位置小于等于结果数组中最后一个区间的结束位置),就将结果数组中最后一个区间的结束位置更新为当前区间的结束位置和结果数组中最后一个区间的结束位置中的较大者。

完整代码

Python
class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals.sort(key=lambda x: x[0])  # Step 1: Sort the intervals by their start valuesmerged = []for interval in intervals:# Step 2: If the list of merged intervals is empty or if the current# interval does not overlap with the previous, simply append it.if not merged or merged[-1][1] < interval[0]:merged.append(interval)else:# Otherwise, there is overlap, so we merge the current and previous intervals.merged[-1][1] = max(merged[-1][1], interval[1])return merged
Java
public class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0])); // Step 1: Sort the intervals by their start valuesLinkedList<int[]> merged = new LinkedList<>();for (int[] interval : intervals) {// Step 2: If the list of merged intervals is empty or if the current// interval does not overlap with the previous, simply add it.if (merged.isEmpty() || merged.getLast()[1] < interval[0]) {merged.add(interval);} else {// Otherwise, there is overlap, so we merge the current and previous intervals.merged.getLast()[1] = Math.max(merged.getLast()[1], interval[1]);}}return merged.toArray(new int[merged.size()][]);}
}

57. 插入区间

给你一个 无重叠的 ,按照区间起始端点排序的区间列表 intervals,其中 intervals[i] = [starti, endi] 表示第 i 个区间的开始和结束,并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval = [start, end] 表示另一个区间的开始和结束。

在 intervals 中插入区间 newInterval,使得 intervals 依然按照 starti 升序排列,且区间之间不重叠(如果有必要的话,可以合并区间)。

返回插入之后的 intervals

注意 你不需要原地修改 intervals。你可以创建一个新数组然后返回它。

示例 1:

输入:intervals = [[1,3],[6,9]], newInterval = [2,5]
输出:[[1,5],[6,9]]

示例 2:

输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出:[[1,2],[3,10],[12,16]]
解释:这是因为新的区间 [4,8][3,5],[6,7],[8,10] 重叠。

解题思路

要在已经排序且无重叠的区间列表中插入一个新的区间,并且仍然保持列表的有序性与不重叠性,可以采取以下步骤:

  1. 初始化:创建一个空的列表 result 来存储最终的区间列表。
  2. 添加新区间前的区间:遍历原始区间列表,将所有结束位置小于新区间起始位置的区间添加到 result 中,因为这些区间与新区间不重叠,并且在新区间的左侧。
  3. 合并重叠区间:继续遍历,对于每个与新区间重叠的区间(即区间的起始位置小于等于新区间的结束位置),更新新区间的起始和结束位置,使其扩展到包括当前区间。这一步可能会通过多次迭代来合并多个重叠的区间。
  4. 添加合并后的新区间:将更新后的新区间添加到 result 中。
  5. 添加新区间后的区间:最后,将所有起始位置大于新区间结束位置的区间添加到 result 中,因为这些区间与新区间不重叠,并且在新区间的右侧。

完整代码

Python
class Solution:def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:result, i = [], 0# Step 2: Add all intervals before the newIntervalwhile i < len(intervals) and intervals[i][1] < newInterval[0]:result.append(intervals[i])i += 1# Step 3: Merge all overlapping intervals to one considering newIntervalwhile i < len(intervals) and intervals[i][0] <= newInterval[1]:newInterval[0] = min(newInterval[0], intervals[i][0])newInterval[1] = max(newInterval[1], intervals[i][1])i += 1result.append(newInterval)  # Step 4: Add the merged interval# Step 5: Add the rest of the intervalswhile i < len(intervals):result.append(intervals[i])i += 1return result
Java
public class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {List<int[]> result = new ArrayList<>();int i = 0;// Step 2: Add all intervals before the newIntervalwhile (i < intervals.length && intervals[i][1] < newInterval[0]) {result.add(intervals[i]);i++;}// Step 3: Merge all overlapping intervals to one considering newIntervalwhile (i < intervals.length && intervals[i][0] <= newInterval[1]) {newInterval[0] = Math.min(newInterval[0], intervals[i][0]);newInterval[1] = Math.max(newInterval[1], intervals[i][1]);i++;}result.add(newInterval);  // Step 4: Add the merged interval// Step 5: Add the rest of the intervalswhile (i < intervals.length) {result.add(intervals[i]);i++;}return result.toArray(new int[result.size()][]);}
}

58. 最后一个单词的长度

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大

子字符串

示例 1:

输入:s = "Hello World"
输出:5
解释:最后一个单词是“World”,长度为5。

示例 2:

输入:s = "   fly me   to   the moon  "
输出:4
解释:最后一个单词是“moon”,长度为4。

示例 3:

输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是长度为6的“joyboy”。

解题思路

  1. 去除尾部空格:首先,我们需要从字符串的尾部开始去除所有的空格,以确保当我们从字符串末尾开始查找单词时,不会被尾部的空格干扰。
  2. 查找最后一个单词:在去除尾部空格后,我们从字符串的最后一个字符开始向前遍历,直到遇到空格或到达字符串的开头。这个过程中遍历的字符数量就是最后一个单词的长度。

完整代码

Python
class Solution:def lengthOfLastWord(self, s: str) -> int:length = 0# Step 1: Trim the trailing spacesindex = len(s) - 1while index >= 0 and s[index] == ' ':index -= 1# Step 2: Count the length of the last wordwhile index >= 0 and s[index] != ' ':length += 1index -= 1return length
Java
public class Solution {public int lengthOfLastWord(String s) {int length = 0;int index = s.length() - 1;// Step 1: Trim the trailing spaceswhile (index >= 0 && s.charAt(index) == ' ') {index--;}// Step 2: Count the length of the last wordwhile (index >= 0 && s.charAt(index) != ' ') {length++;index--;}return length;}
}

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

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

相关文章

MCU技术的创新浪潮与产业变革

MCU技术的创新浪潮与产业变革 一、MCU技术的创新发展 MCU&#xff0c;即微控制器&#xff0c;作为现代电子设备的核心部件&#xff0c;一直在不断地创新与发展。随着科技的进步&#xff0c;MCU的性能得到了极大的提升&#xff0c;功能也越来越丰富。从8位到32位&#xff0c;再…

G1和ZGC垃圾回收器学习

前言 ​ 随着JDK17的占有率不断升高和SpringBoot3最低支持JDk17&#xff0c;JDK17很大概率会成为大家后续升级的一个选择&#xff0c;而JDK17上最重要的垃圾回收器G1和ZGC&#xff0c;也就显得格外重要。大家提前了解或者学习一下肯定是有用的。 ​ 本篇文章也默认大家了解一…

单片机学到什么程度才可以去工作?

单片机学到什么程度才可以去工作? 如果没有名校或学位的加持&#xff0c;你还得再努力一把&#xff0c;才能从激烈的竞争中胜出。以下这些技能可以给你加分&#xff0c;你看情况学&#xff0c;不同行业对这些组件会有取舍: . Cortex-M内核:理解MCU内核各部件的工作机制&#…

力扣---两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

快速画流程图

使用在线工具&#xff1a;PlantUML PlantUML 官网:https://plantuml.com/ 中文官网:https://plantuml.com/zh/ 使用步骤如下&#xff1a; 1、拷贝一个完成函数&#xff1a; int func_init(const char *tag) {if (tag ! NULL) {printf("set TAG :%s", tag);}print…

webpack5零基础入门-13生产模式

1.生产模式介绍 生产模式是开发完成代码后&#xff0c;我们需要得到代码将来部署上线。 这个模式下我们主要对代码进行优化&#xff0c;让其运行性能更好。 优化主要从两个角度出发: 优化代码运行性能优化代码打包速度 2.生产模式准备 我们分别准备两个配置文件来放不同的…

python的FastAPI 快速入门

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

《算法王晓东》多处最优服务次序问题

多处最优服务次序问题 题目描述 设有n个顾客同时等待一项服务。顾客i需要的服务时间为ti, 1≤i≤n。共有s处可以提供此项服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小? 平均等待时间是n个顾客等待服务时间的总和除以n。 算法设计&#xff1a;对于给定的n个顾…

41 物体检测和目标检测数据集【李沐动手学深度学习v2课程笔记】

目录 1. 物体检测 2. 边缘框实现 3.数据集 4. 小结 1. 物体检测 2. 边缘框实现 %matplotlib inline import torch from d2l import torch as d2ld2l.set_figsize() img d2l.plt.imread(../img/catdog.jpg) d2l.plt.imshow(img);#save def box_corner_to_center(boxes):&q…

设计模式之抽象工厂模式解析

抽象工厂模式 1&#xff09;问题 工厂方法模式中的每个工厂只生产一类产品&#xff0c;会导致系统中存在大量的工厂类&#xff0c;增加系统的开销。 2&#xff09;概述 a&#xff09;产品族 和 产品等级结构 产品等级结构&#xff1a;产品的继承结构&#xff1b; 产品族&…

通俗理解自注意力机制

自注意力机制&#xff08;Self-Attention Mechanism&#xff09; 是一种用于处理序列数据的机制&#xff0c;最初被引入到神经网络模型中&#xff0c;用于在序列数据中建立全局依赖关系。自注意力机制最常用于自然语言处理和计算机视觉领域&#xff0c;特别是在Transformer模型…

【Flutter】文件选择器(file_picker)的用法

Flutter 没有提供内置的文件选择器&#xff0c;但社区内有人贡献了一个比较完整的解决方案——file_picker。 file_picker 的 API 简洁易用&#xff0c;支持全平台&#xff08;Android / iOS / Mac / Linux / Windows&#xff09;&#xff0c;是我开发桌面应用时的首选。 这边…

HMI界面之:上位机界面设计,一文扫盲

一、什么是上位机 上位机&#xff08;Supervisory Control and Data Acquisition&#xff0c;简称SCADA&#xff09;是一种用于监控和控制工业过程的计算机系统。它通常由两个主要部分组成&#xff1a;上位机和下位机。 上位机是SCADA系统中的主要控制中心&#xff0c;负责监控…

mysql笔记:24. 主从同步环境搭建

文章目录 主从同步的基本原理主从同步的搭建步骤1. 环境准备2. 配置主服务器&#xff08;Master&#xff09;3. 配置从服务器&#xff08;Slave&#xff09;4. 测试配置5. 常见故障5.1. 主从服务器上的MySQL版本不一致导致失败&#xff1f;5.2. Slave_IO_Running状态异常&#…

使用ollama + webui 运行任意大模型

安装ollama https://hub.docker.com/r/ollama/ollama docker run -d -v ~/Documents/work/softs/docker/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama验证安装 # 进入容器docker exec -it ollama bash # 运行大模型 ollama run llama2 # 发送请求&…

三级数据库技术考点(详解!!)

1、 答疑:【解析】分布式数据库系统按不同层次提供的分布透明性有:分片透明性;②位置透明性;③局部映像透明性&#xff0c;位置透明性是指数据分片的分配位置对用户是透明的&#xff0c;用户编写程序时只需 要考虑数据分片情况&#xff0c;不需要了解各分片在各个场地的分配情…

什么是物联网远程模块

在数字化和信息化的浪潮下&#xff0c;物联网技术正在以惊人的速度改变着我们的生活和生产方式。物联网远程模块&#xff0c;作为物联网技术的核心组件之一&#xff0c;正引领着这场变革。HiWoo Box就是这样一款出色的物联网远程模块&#xff0c;它通过支持远程透传、远程锁机、…

多进程数据库不适合作为hive的元数据库

简介 “今天发现一个比较奇怪的现象&#xff0c;因为博主不熟悉mysql&#xff0c;所以在安装hive的使用了postgresql作为hive的元数据库&#xff0c;在测试几个连接工具对hive进行链接&#xff0c;后面再测试的时候发现链接不上了&#xff0c;并且报错日志如下&#xff1a;” …

从回收站删除的文件如何恢复?图文详解(3个方法)!

“各位大佬&#xff01;从回收站删除了重要的文件后&#xff0c;有什么方法可以恢复文件吗&#xff1f;快帮帮我吧&#xff01;这些被删除的文件都是比较重要的&#xff01;” 回收站作为电脑中的一个重要工具&#xff0c;当我们误删文件后&#xff0c;通过回收站有机会快速恢复…

QT增加线程函数步骤流程

在使用线程的时候&#xff0c;不仅要关注线程开启的时机&#xff0c;同时还要关注线程安全退出&#xff0c;这样才能保证程序的健壮性&#xff0c;如果线程开启的较多&#xff0c;且开启关闭比较频繁&#xff0c;建议使用线程池来处理。开启线程有三种方式&#xff1a;第一种C的…