代码随想录算法训练营第三十六天| LeetCode435.无重叠区间、LeetCode763.划分字母区间、LeetCode56.合并区间

LeetCode 435 无重叠区间

题目链接:435. 无重叠区间 - 力扣(LeetCode)

【解题思路】

  • 需要先将数组按照左/右边界排序,这里按照左边界排序来解

  • 如果第i个区间的左边界大于等于i-1区间的右边界

【解题步骤】

  • 1.判断数组大小,如果等于0,则return 0;

  • 2.对数组的左边界进行排序

  • 3.定义一个result,初始化为0,记录重叠区间的数量

  • 3.遍历数组(i从1开始,因为比较的时候是i-1和i进行比较,从0开始会出现负数):

    • 如果当前元素左边界小于上一个气球的右边界:

      • result++

      • 当前元素右边界和上一个元素右边界取最小值更新当前元素的右边界

  • 5.return result

【代码部分】

class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals, (a,b)-> {return Integer.compare(a[0],b[0]);});int remove = 0;for(int i = 1; i < intervals.length; i++) {if(intervals[i-1][1] > intervals[i][0]) {remove++;intervals[i][1] = Math.min(intervals[i-1][1], intervals[i][1]);}}return remove;}
}

LeetCode 763 划分字母区间

题目链接:763. 划分字母区间 - 力扣(LeetCode)

【解题思路】

    将当前字母出现的最远位置记录下来,遍历收集到这个字母出现的最远位置,如果在遍历过程中收集到比我们当前“最远出现位置”更远的数组,则对我们收集元素的结束位置进行更新,直到收获。

【解题步骤】

  • 1.定义一个哈希数组,用来记录每个字母最远出现的位置

  • 2.遍历一遍字符串,记录每个字母的最远出现位置

  • 3.定义一个数组,存每个字符串的长度

  • 4.定义left和right分别记录当前区间的左右下标,计算当前区间的长度

  • 5.遍历字符串:

    • 不断更新右边界,取当前右边界与‘当前字母出现的最远位置’之间的最大值

    • 当遍历到最远处(i == right)

      • 将当前区间的长度放入结果集(right-left+1)

      • 更新left到当前位置的后一个位置(left = i +1)

【代码部分】

class Solution {public List<Integer> partitionLabels(String s) {List<Integer> result = new LinkedList<>();char[] chars = s.toCharArray();//将字符串放进数组里,方便遍历int [] edge = new int[26];for(int i = 0 ; i < chars.length ; i++){edge[chars[i] - 'a'] = i;}int left = 0;int right = 0;for(int i = 0; i < chars.length ; i++){right = Math.max(right,edge[chars[i] - 'a']);if(i == right){result.add(right - left + 1);left = i+1;}}return result;}
}

LeetCode 56 合并区间

题目链接:56. 合并区间 - 力扣(LeetCode)

【解题思路】

  • 将数组按照左边界排序,将相邻的区间挨在一起

  • 如果当前区间的左边界小于等于上一个区间的右边界,说明这两个区间一定重叠

    • 将两个区间合并后放入result结果集

  • 如果当前区间的左边界大于上一个区间的右边界,说明这两个区间没有重叠

    • 直接将区间放入result结果集

【解题步骤】

  • 1.定义一个二维数组result用来存放结果集

  • 2.如果区间的大小为0,说明区间是空,直接返回result

  • 3.将区间按照左边界由小到大进行排序

  • 4.将数组的第一个区间直接放入结果集

  • 5.遍历数组:

    • 如果当前遍历的区间的左边界小于等于上一个区间的右边界:

      • 因为我们的第一个区间已经放入结果集里,我们可以直接在结果集里进行修改,取上一个区间的操作就等价于从result结果集里取最后一个元素

      • 更新结果集里区间的右边界,即:取”当前区间的右边界和上一个区间的右边界“里的最大值

    • 如果当前遍历的区间的左边界大于上一个区间的右边界:

      • 将当前遍历的区间直接放入result数组里

  • 6.返回result数组

【代码部分】

class Solution {public int[][] merge(int[][] intervals) {LinkedList<int[]> result = new LinkedList<>();if(intervals.length == 0)return null;Arrays.sort(intervals,(a,b)->{return Integer.compare(a[0],b[0]);});result.add(intervals[0]);for (int i = 1; i < intervals.length; i++) {if(intervals[i][0] <= result.getLast()[1]){result.getLast()[1] = Math.max(intervals[i][1],result.getLast()[1]);}else{result.add(intervals[i]);}}return result.toArray(new int[result.size()][]);}
}

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

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

相关文章

如何处理PHP中的文件上传和下载?

如何处理PHP中的文件上传和下载&#xff1f; 处理PHP中的文件上传和下载是Web开发中常见的任务&#xff0c;涉及到前端表单的设计、后端脚本的编写以及服务器配置等多个方面。下面将详细阐述如何在PHP中实现文件上传和下载的功能。 文件上传 文件上传通常涉及前端表单的创建…

【前端】vue3使用方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、vue3简介二、使用步骤三、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人学习前端工具&#xff0c;本文主要是介绍vue3的使用方…

package.json 里面的 dependencies 和 devDependencies 的差异

差异 其实不严格的话&#xff0c;没有特别的差异&#xff1b;若是严格&#xff0c;遵循官方的理解。 dependencies&#xff1a;存放线上或者业务能访问的核心代码模块&#xff0c;比如 vue、vue-routerdevDependencies&#xff1a;处于开发模式下所依赖的开发模块&#xff0c…

c++ 二分查找

二分查找&#xff08;Binary Search&#xff09;是一种在有序数组中查找特定元素的高效算法。它通过不断将搜索范围减半来查找目标元素。其时间复杂度为 O(log n)&#xff0c;这是因为每一步都将搜索范围减半&#xff0c;因此算法的性能非常高。 二分查找的基本思想是&#xf…

如何在TestNG中忽略测试用例

在这篇文章中&#xff0c;我们将讨论如何在TestNG中忽略测试用例。TestNG帮助我们忽略使用Test注释的情况&#xff0c;我们可以在不同的级别上忽略这些情况。 首先&#xff0c;只忽略一个测试方法或测试用例。第二&#xff0c;忽略一个类及其子类中的所有情况。第三个是&#…

C语言实现双人贪吃蛇项目(基于控制台界面)

一.贪吃蛇 贪吃蛇是一款简单而富有乐趣的游戏&#xff0c;它的规则易于理解&#xff0c;但挑战性也很高。它已经成为经典的游戏之一&#xff0c;并且在不同的平台上一直受到人们的喜爱和回忆。 二.贪吃蛇的功能 游戏控制&#xff1a;玩家可以使用键盘输入设备来控制蛇的移动方…

二分查找-边界条件讨论

题目&#xff1a;二分查找 存在问题的地方&#xff1a; 边界条件while(left __ right)中是 < 还是 <循环中if(nums[middle] > target) right _____中是middle还是middle - 1 应该在区间上讨论&#xff1a; 左闭右闭&#xff1a;[ left , right ]左闭右开&#xf…

二维字符型数组算法整理

1. 二维字符串数组的冒泡排序 #include <stdio.h> #include <string.h>int main(void) {char str[5][32] {0};int i 0;int j 0;char tmp[32] {0};for (i 0; i < 5; i){gets(str[i]);}for (i 0; i < 4; i){for (j 0; j < 4-i; j){if (strcmp(str[j…

【软件安装】(十六)双系统Ubuntu22.04引导启动菜单的默认项

一个愿意伫立在巨人肩膀上的农民...... 好学的人总是喜欢在电脑上安装双系统&#xff0c;可是安装好系统之后&#xff0c;就会出现默认启动优先级的苦恼&#xff0c;如果在Bios中设置Windows引导启动为优先启动&#xff0c;那么每次想要进如Ubuntu系统就都需要重新设置Bios。如…

TP6.0 命令行生成类库文件

1. 生成控制器 // 默认生成资源控制器&#xff0c;有七个方法资源操作方法// index、create、save、read、edit、update、deletephp think make:controller Blog// 创建多级控制器php think make:controller user/Blog// 创建index应用下的Blog控制器php think make:controller…

[Vue warn]: useModel() called with prop “xxx“ which is not declared

我们在使用vue3里面的defineModel的时候可能会出现这个问题&#xff0c;原因是我们使用的 kebab-case 形式的属性名&#xff0c;我也不知道是不是vue3设定这个api的时候设置的不支持&#xff0c;我没找到相关文档&#xff0c;不过我们把 kebab-case 的形式改为 驼峰命名法 或者…

YOLOv8 训练自己的数据集(20240423)

环境搭建请参考&#xff1a;Win10 搭建 YOLOv8 运行环境&#xff08;20240423&#xff09;-CSDN博客 环境测试请参考&#xff1a;本地运行测试 YOLOv8&#xff08;20240423&#xff09;-CSDN博客 一、使用 YOLOv8 的 coco128 数据集熟悉一下如何训练和预测 1.1、在项目根目录…

ClickHouse用UDF解析XML字符串和XML文件

一.如果是读取xml文件的时候&#xff0c;文件入库需要使用文件读取UDF 创建了1个测试文件 wsdFileRead()&#xff1a; 直接读取文件内容 SELECT wsdFileRead(/home/temp/wsd_test.xml)Query id: 09b6e5fe-7169-43f7-b001-90e2eeabb8da┌─wsdFileRead(/home/temp/wsd_test.xm…

广州大学《虚拟现实与游戏开发》实验报告一HTC-VR环境搭建与开发

广州大学学生实验报告 开课实验室&#xff1a; 学院 年级、专业、班 姓名 学号 实验课程名称 虚拟现实与游戏开发 成绩 实验项目名称 1. HTC-VR环境搭建与开发 指导老师 实验目的 HTC VIVE硬件安装虚拟现实开发环境搭建 3.熟悉虚拟现实硬件系统和…

串口服务器和光纤交换机的区别

串口服务器与光纤交换机在功能和应用上存在显著区别。串口服务器主要实现串口设备与以太网设备之间的数据转换与传输&#xff0c;适用于远程监控、数据采集等场景&#xff1b;而光纤交换机则专注于高速光纤网络中的数据交换&#xff0c;为大型企业或数据中心提供稳定、高效的数…

基于SpringBoot的合家云社区物业管理平台 - 权限管理模块开发

合家云社区物业管理平台 4.权限管理模块开发 4.1 权限管理概述 4.1.1 权限管理的意义 后台管理系统中&#xff0c;通常需要控制不同的登录用户可以操作的内容。权限管理用于管理系统资源&#xff0c;分配用户菜单、资源权限&#xff0c;以及验证用户是否有访问资源权限。 …

16:事务-Java Spring

目录 16.1 Spring事务管理原理16.2 Spring事务配置与代码示例16.3 事务策略的区别16.4 Spring事务应用场景总结 16.1 Spring事务管理原理 Spring事务管理基于AOP&#xff08;面向切面编程&#xff09;实现&#xff0c;通过拦截方法调用&#xff0c;对业务逻辑进行增强&#xf…

开源模型应用落地-chatglm3-6b-集成langchain(十)

一、前言 langchain框架调用本地模型&#xff0c;使得用户可以直接提出问题或发送指令&#xff0c;而无需担心具体的步骤或流程。通过LangChain和chatglm3-6b模型的整合&#xff0c;可以更好地处理对话&#xff0c;提供更智能、更准确的响应&#xff0c;从而提高对话系统的性能…

构建企业信息安全防护体系:以电子文档安全为核心

随着信息社会的飞速发展与企业信息化建设的深入&#xff0c;企业的商业机密已从传统的纸质文件转向各类电子文档&#xff0c;如CAD图纸、Office文档等。这些数字化的信息载体在提升工作效率、便捷信息流转的同时&#xff0c;也成为了企业内部数据安全面临的主要挑战。如何有效地…

基于springboot实现中药实验管理系统设计项目【项目源码+论文说明】

基于springboot实现中药实验管理系统设计演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了中药实验管理系统的开发全过程。通过分析中药实验管理系统管理的不足&#xff0c;创建了一个计算机管理中药实验管…