力扣爆刷第153天之TOP100五连刷31-35(合并区间、编辑距离、复原IP)

力扣爆刷第153天之TOP100五连刷31-35(合并区间、编辑距离、复原IP)

文章目录

      • 力扣爆刷第153天之TOP100五连刷31-35(合并区间、编辑距离、复原IP)
      • 一、56. 合并区间
      • 二、124. 二叉树中的最大路径和
      • 三、72. 编辑距离
      • 四、19. 删除链表的倒数第 N 个结点
      • 五、93. 复原 IP 地址

一、56. 合并区间

题目链接:https://leetcode.cn/problems/merge-intervals/description/
思路:合并区间,只需要先按照左边界排序,然后判断相邻区间是否交接,交接就合并,不交接就记录下来即可。

class Solution {public int[][] merge(int[][] intervals) {List<int[]> list = new ArrayList<>();Arrays.sort(intervals, (a, b) -> a[0] - b[0]);int left = intervals[0][0], right = intervals[0][1];for(int[] nums : intervals) {if(nums[0] > right) {list.add(new int[]{left, right});left = nums[0];right = nums[1];}else {right = Math.max(right, nums[1]);}}list.add(new int[]{left, right});int[][] result = new int[list.size()][2];for(int i = 0; i < list.size(); i++) {result[i] = list.get(i);}return result;}
}

二、124. 二叉树中的最大路径和

题目链接:https://leetcode.cn/problems/binary-tree-maximum-path-sum/description/
思路:求二叉树中的最大路径和,对这个路径和的定义是只有一个节点也算,也不一定非得有根节点,所以这种路径和的计算,首先得使用后序遍历,因为每一个节点需要依赖他们的子节点传递的值,对于每一个节点来说,都可以考虑选择左子树或者右子树加入路径,条件就是只要大于零就算是路径的一员,但是相上层返回时,路径又要单一化,即只能是一条边。

class Solution {int max = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {traverse(root);return max;}int traverse(TreeNode root) {if(root == null) return 0;int left = traverse(root.left);int right = traverse(root.right);left = left > 0 ? left : 0;right = right > 0 ? right : 0;max = Math.max(max, root.val + left + right);return Math.max(left, right) + root.val;}
}

三、72. 编辑距离

题目链接:https://leetcode.cn/problems/edit-distance/description/
思路:编辑距离的题目也是经典的动态规划题,可以对字符串中的字符进行删除、增加、替换。
定义dp[i][j]表示以text1[0, i]和text2[0, j]为结尾的字符串要相等的最小步骤。
其实,如果text1[i] == text2[j]那么dp[i][j]其实是依赖于上一个位置的操作数,即text1[i-1]和text2[j-1]的操作数,即dp[i][j] = dp[i-1][j-1]+1。
这是想等的情况,对于不等的情况,可以选择:
删除:假如对text1删除,其实是依赖于text1[i-1]的位置,即dp[i][j] = dp[i-1][j]+1.
增加:假如对text1增加,其实可以看成对text2删除,即a,ab。即dp[i][j] = dp[i][j-1]+1.
替换:对于替换,只是把text1[i]或者text2[j]进行了替换,这算一步,其他的依赖于前一个步骤的操作数,即dp[i][j] = dp[i-1][j-1]+1.

class Solution {public int minDistance(String word1, String word2) {int[][] dp = new int[word1.length()+1][word2.length()+1];for(int i = 0; i <= word1.length(); i++) dp[i][0] = i;for(int j = 0; j <= word2.length(); j++) dp[0][j] = j;for(int i = 0; i < word1.length(); i++) {for(int j = 0; j < word2.length(); j++) {if(word1.charAt(i) == word2.charAt(j)) {dp[i+1][j+1] = dp[i][j];}else{dp[i+1][j+1] = Math.min(Math.min(dp[i+1][j], dp[i][j+1]), dp[i][j]) + 1;}}}return dp[word1.length()][word2.length()];}
}

四、19. 删除链表的倒数第 N 个结点

题目链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/
思路:删除倒数第N个节点,只需要快慢指针,快指针先走N步,然后快慢指针同步往前走,当快指针走到结尾处时,慢指针的下一个位置就是要删除的节点。

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode root = new ListNode(-1, head);ListNode slow = root, fast = root;for(int i = 0; i < n; i++) fast = fast.next;while(fast.next != null) {slow = slow.next;fast = fast.next;}fast = slow.next;slow.next = fast.next;fast.next = null;return root.next;}
}

五、93. 复原 IP 地址

题目链接:https://leetcode.cn/problems/restore-ip-addresses/description/
思路:本题类似于排列,只不过是特定顺序的排列,也是正常做,需要指定递归的起始位置,递归的结束位置为,遍历到结尾,且收集元素数量为4,即可。其他的为正常递归的流程,只不过在判断切分的元素是否是0<=x<=255时,需要判断一下。另外就是早停操作,要剪辑的范围超出了3即要停止。

class Solution {List<String> list = new ArrayList<>();List<String> res = new ArrayList<>();public List<String> restoreIpAddresses(String s) {backTracking(s, 0);return res;}void backTracking(String s, int index) {if(list.size() == 4) {if(s.length() == index) res.add(String.join(".", list));return;}for(int i = index; i < s.length() && i - index < 3; i++) {String t = fun(s, index, i);if(t != null) {list.add(t);backTracking(s, i+1);list.remove(list.size()-1);}} }String fun(String s, int x, int y) {if(x != y && s.charAt(x) == '0') return null;String t = s.substring(x, y+1);int k = Integer.valueOf(t);if(k >= 0 && k <= 255) return t;return null;}}

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

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

相关文章

Kubernetes排错(七)-Pod 状态一直 ContainerCreating

查看 Pod 事件 $ kubectl describe pod apigateway-6dc48bf8b6-l8xrw -n cn-staging 异常原因 1&#xff09;no space left on device ... Events:Type Reason Age From Message---- ------ …

Google项目管理总览(一)

目录 一、项目管理基础 1.1、项目 1.2、项目管理 1.2.1、重要性&#xff08;why&#xff09; 1.2.2、项目生命周期 1.2.3、方法论&#xff08;项目管理&#xff09; 1.3、项目经理 1.3.1、构建人际关系的技巧 1.3.2、注意 1.4、组织架构 1.5、组织文化 二、Project …

Crypto/Util/number.py“, line 139 value |= 2L ** (N-1) # Ensure high bit is set

Crypto/Util/number.py", line 139 value | 2L ** (N-1) # Ensure high bit is set 解决办法 pip3 install pyrebase4

[SAP ABAP] 读取内表数据

1.读取单条数据 1.1 索引查找 语法格式 READ TABLE <itab> INTO <wa> INDEX <idx>.<itab>&#xff1a;代表内表 <wa>&#xff1a;代表工作区 <idx>&#xff1a;代表索引值 示例1 结果显示&#xff1a; 1.2 关键字查找 READ TABLE <…

Redis协议规范简介

Redis客户端使用为名为RESP&#xff08;Redis序列化协议&#xff09;的协议与Redis服务器进行通信。虽然该协议是专门为Redis设计的&#xff0c;但它也可以用于其他的CS软件项目的通信协议。 RESP可以序列化不同的数据类型&#xff0c;如整型&#xff0c;字符串&#xff0c;数…

【python】python海底捞门店营业数据分析与可视化(数据集+源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

pyttsx3:Python文本到语音转换库的全面指南

目录 引言 一、pyttsx3 简介 二、安装 pyttsx3 三、基本用法 四、配置语音属性 五、支持的命令和功能 六、高级用法 结语 引言 在当今的软件开发中&#xff0c;提供语音交互功能已成为提升用户体验的一种重要方式。Python&#xff0c;作为一种广泛使用的编程语言&#x…

JavaSE基础总结复习之面向对象の知识总结

目录 Java语言的基础特点 面向对象 类和对象 类 类的构造 一&#xff0c;发现类 二&#xff0c;发现类的共有属性&#xff08;成员变量&#xff09; 三&#xff0c;定义类的成员方法&#xff08;行为&#xff0c;动词&#xff09; 四&#xff0c;使用类创建对象 对象…

vue3使用 JSX / TSX语法

一、什么是 JSX / TSX JSX / TSX 语法 JSX 是一种将XML语法嵌入到JavaScript中的语法。在 Vue3 中&#xff0c;我们可以使用JSX语法来编写组件的模板。使用JSX语法可以让我们更加灵活地定义组件的模板&#xff0c;并且可以让我们在编写组件时使用JavaScript的全部语言特性。 …

05-5.5.2 并查集

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

【面试干货】HashSet 和 TreeSet 的区别

【面试干货】HashSet 和 TreeSet 的区别 1、实现方式HashSetTreeSet 2、性能添加、删除和查找操作的时间复杂度HashSetTreeSet 3、元素唯一性4、迭代顺序HashSetTreeSet 5、使用场景HashSetTreeSet 6、示例代码 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不…

阅读笔记:明朝那些事儿妖孽横行的宫廷

明朝那些事儿第四部看完了&#xff0c;合上书本给我印象比较深刻的文臣要数王守仁&#xff0c;不愧为明朝的军事家&#xff0c;思想家&#xff0c;文学家&#xff0c;教育家&#xff0c;他经过多年的思索、磨难、追求&#xff0c;终于有一天&#xff0c;在穷乡僻壤&#xff0c;…

Linux的基本指令第二篇

1.cat - 查看文件 语法&#xff1a;cat [选项] [文件] 功能&#xff1a; 查看目标文件的内容 -b 对非空输出行编号 -n对输出的所有行编号 -s不输出多行空行 现有一个文件test.c cat -n test.c cat -b test.c cat -s test.c 创建一个新文件 加入源文件的内容 || …

Python基础教程(三十二):random模块

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝💝💝如有需要请大家订阅我的专栏【Python系列】哟!我会定期更新相关系列的文章 💝💝💝关注!关注!!请…

华为OD刷题C卷 - 每日刷题38(万能字符单词拼写,虚拟理财游戏)

1、&#xff08;万能字符单词拼写&#xff09;&#xff1a; 这段代码是解决“万能字符单词拼写”的问题。它提供了一个Java类Main&#xff0c;其中包含main方法和getResult方法&#xff0c;以及一个辅助方法success&#xff0c;用于计算使用给定字符chars能拼写出的单词words中…

数据分析:置换检验Permutation Test

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 置换检验是一种非参数统计方法&#xff0c;它不依赖于数据的分布形态&#xff0c;因此特别适…

flowable 适配达梦数据库(最简单的方式)

只需要引入一个 jar 包&#xff0c;就可以轻松实现 flowable 对达梦数据库的适配。 参考如下博客&#xff1a; SpringBoot 中的 Liquibase 适配达梦数据库&#xff08;DM&#xff09;和 Flowable 工作流_liquibase 达梦数据库-CSDN博客 SpringBoot 中的 flyway 支持达梦数据库…

Linux——man帮助命令

一、man 获得帮助信息 基本语法&#xff1a;man [命令或配置文件] &#xff08;功能描述&#xff1a;获得帮助信息&#xff09; 查看 ls 命令的帮助信息 [roothadoop101 ~]# man ls man [数字] [函数] 1、Standard commands &#xff08;标准命令&#xff09; 2、System…

lvgl v8 个人总结

1. lv_group_remove_all_objs(g);//!!移除组所有对象&#xff0c;也需要再次设置默认组。默认组的作用&#xff0c;和一个一个的添加组&#xff0c;没有本质区别。 2. lv_group_del(g);//这个会同时删除组&#xff0c;即切断了输入设备与组的绑定。所以之后需要重新creat。&…

使用 select 进行 UART 通信的注意事项

文章目录 引言UART 通信中的 select 函数select 函数的工作原理使用 select 进行 UART 通信的注意事项示例代码 引言 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;是一种用于异步串行通信的硬件协议&#xff0c;常用于计算机和外设之间的数据交换…