力扣爆刷第153天之TOP100五连刷(相交、翻转、排序链表、螺旋矩阵、锯齿二叉树)

力扣爆刷第153天之TOP100五连刷(相交、翻转、排序链表、螺旋矩阵、锯齿二叉树)

文章目录

      • 力扣爆刷第153天之TOP100五连刷(相交、翻转、排序链表、螺旋矩阵、锯齿二叉树)
      • 一、103. 二叉树的锯齿形层序遍历
      • 二、92. 反转链表 II
      • 三、54. 螺旋矩阵
      • 四、23. 合并 K 个升序链表
      • 五、160. 相交链表

一、103. 二叉树的锯齿形层序遍历

题目链接:https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal/description/
思路:本题很有意思,要求层序遍历,但是需要从左往右,再从右往左,以此往复。但本质上还是层序遍历,所以不要想复杂了,我们要维持层序遍历的框架不要动,正常的使用层序遍历,但是在出队收集元素时,使用一个双向队列来收集,按照偶数层和奇数层分别从右边添加进入队列和从左边添加进入队列。即可。

class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> result = new ArrayList<>();if(root == null) return result;LinkedList<TreeNode> queue = new LinkedList<>();queue.add(root);boolean flag = true;while(!queue.isEmpty()) {int size = queue.size();LinkedList<Integer> list = new LinkedList<>();for(int i = 0; i < size; i++) {TreeNode node = queue.poll();if(flag) list.addLast(node.val);else list.addFirst(node.val);if(node.left != null) queue.add(node.left);if(node.right != null) queue.add(node.right);}flag = !flag;result.add(list);}return result;}}

二、92. 反转链表 II

题目链接:https://leetcode.cn/problems/reverse-linked-list-ii/description/
思路:在指定区间内进行翻转,翻转的话可以使用头插法或者尾插法,都可以,我这里使用头插法,但是需要实现记录下来,要进行翻转的节点的前一个节点,这个是作为头,要翻转的节点中的第一个节点,这个作为拼接使用的尾,把握住这两个点,即可进行翻转。

class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {ListNode root = new ListNode(-1, head);ListNode start = root, end = null, p = root, q = null;for(int i = 0; i < left; i++) {start = p;p = p.next;}start.next = null;end = p;for(int i = left; i <= right; i++) {q = p.next;p.next = start.next;start.next = p;p = q;}end.next = p;return root.next;}}

三、54. 螺旋矩阵

题目链接:https://leetcode.cn/problems/spiral-matrix/description/
思路:螺旋矩阵也是一个经典的题目了,这个需要控制上下左右四个边界条件,每遍历完一条边就缩小一条边界,直至最后。

class Solution {List<Integer> spiralOrder(int[][] matrix) {List<Integer> list = new ArrayList<>();int n = matrix.length, m = matrix[0].length, left = 0, right = m, up = 0, down = n;while(list.size() < n*m) {if(up < down) {for(int i = left; i < right; i++) {list.add(matrix[up][i]);}up++;}if(left < right) {for(int i = up; i < down; i++) {list.add(matrix[i][right-1]);}right--;}if(up < down) {for(int i = right-1; i >= left; i--) {list.add(matrix[down-1][i]);}down--;}if(left < right) {for(int i = down-1; i >= up; i--) {list.add(matrix[i][left]);}left++;}}return list;}
}

四、23. 合并 K 个升序链表

题目链接:https://leetcode.cn/problems/merge-k-sorted-lists/description/
思路:这个也是相当经典的一个题了,使用优先级队列,把链表加入其中,然后队头出队,组装链表,如果该节点下一个节点非空则再加入优先级队列中。

class Solution {public ListNode mergeKLists(ListNode[] lists) {PriorityQueue<ListNode> queue = new PriorityQueue<>((a, b) -> a.val-b.val);for(ListNode node : lists) {if(node != null) {queue.add(node);}}ListNode root = new ListNode();ListNode p = root;while(!queue.isEmpty()) {ListNode node = queue.poll();p.next = node;p = node;if(node.next != null) {queue.add(node.next);}}return root.next;}
}

五、160. 相交链表

题目链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/description/
思路:求相交链表,也是非常经典的一个题目,只需要分别求长度,然后对其长度,逐一比较即可。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode pa = headA, pb = headB;int lena = 0, lenb = 0;while(pa != null) {pa = pa.next;lena++;}while(pb != null) {pb = pb.next;lenb++;}pa = headA;pb = headB;for(int i = lena; i < lenb; i++) {pb = pb.next;}for(int i = lenb; i < lena; i++) {pa = pa.next;}while(pa != null) {if(pa == pb) return pa;pa = pa.next;pb = pb.next;}return null;}
}

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

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

相关文章

Python for循环中的引用传递和值传递

先上代码&#xff1a; a [[1],[2],[3]] b [[4,5],[6,7],[7,8]] for i,j in zip(a,b):print(i,j)i [9]#i[0] 8j[:2][1,2]print(i, j) print(a) print(b) 运行的结果&#xff1a; [1] [4, 5] [9] [1, 2] [2] [6, 7] [9] [1, 2] [3] [7, 8] [9] [1, 2] [[1], [2], [3]] [[1…

android常用知识

透明activity样式&#xff1a; android:theme"android:style/Theme.Translucent.NoTitleBar.Fullscreen"这句代码&#xff0c;当你是建的empty activity project时&#xff0c;默认继承的是AppCompat这个类。所以在AndroidMifext.xml文件中用上述代码会导致程序错误&…

ROM 和 RAM

ROM (只读存储器) 和 RAM (随机存取存储器) 是计算机系统中两种不同类型的存储器。它们在定义、用途、工作原理、数据可写性和典型应用方面存在显著差异。 ROM &#xff08;Read-Only Memory&#xff09;(只读存储器) 定义:ROM 是一种只读存储器,用于存储计算机的固件和永久性…

Qt | 简单的使用 QStyle 类(风格也称为样式)

01、前言 者在 pro 文件中已添加了正确的 QT+=widgets 语句 02、基础样式 1、QStyle 类继承自 QObject,该类是一个抽像类。 2、QStyle 类描述了 GUI 的界面外观,Qt 的内置部件使用该类执行几乎所有的绘制,以确保 使这些部件看起来与本地部件完全相同。 3、Qt 内置了一系…

linux段异常信号量

在 Linux 系统中&#xff0c;段异常&#xff08;Segmentation Fault&#xff09;和信号量&#xff08;Semaphore&#xff09;是两个不同的概念&#xff0c;但它们都与进程间通信&#xff08;IPC&#xff09;和错误处理有关。我会分别解释它们&#xff0c;然后解释它们之间可能的…

制造业为什么需要ERP企业管理软件?

如今&#xff0c;传统的制造业管理方式逐渐变得力不从心~库存积压、生产效率低下、供应链混乱…想象一下&#xff0c;如果你的企业仍然依赖于手工记录订单、库存和财务数据&#xff0c;那么每当市场发生变动时&#xff0c;你就需要花费大量的时间和精力去重新调整生产计划、更新…

【深度学习驱动流体力学】VTK创建、处理和可视化流体数据

Visualization Toolkit&#xff08;VTK&#xff09;是一个强大的开源软件系统&#xff0c;用于处理和可视化三维数据。它提供了丰富的工具和算法&#xff0c;可以处理从简单的网格数据到复杂的流体动力学模拟数据等各种类型的数据。本文将完整介绍如何使用 VTK 创建、处理和可视…

Springboot + Mybatis 实现sql打印

参照这个视频&#xff1a;https://www.bilibili.com/video/BV1MS411N7mn/?vd_source90ebeef3261cec486646b6583e9f45f5 实现mybatis对外暴露的接口Interceptor 使用Intercepts接口,这里的写法参照mybatis-plus中的拦截器写法 Intercepts({Signature(type Executor.class, m…

CMake编译proto的方法(custom_target和custom_command)

最近在项目中涉及到在QNX平台上编译CyberRT&#xff0c;其中CyberRT使用到了protobuf&#xff0c;因此&#xff0c;仓库内部有许多proto文件&#xff0c;需要先行将这些proto文件生成对应的.cc和.h文件才能被其他文件使用。 之前一直使用protobuf_generate_cpp来编译proto文件&…

如何在C++中实现延迟删除功能

在软件开发中&#xff0c;缓存是一种常见的优化技术&#xff0c;它允许我们存储数据以供快速访问&#xff0c;从而减少对慢速存储或网络资源的依赖。然而&#xff0c;有时我们可能希望缓存中的某些数据在一段时间后自动过期并被删除&#xff0c;这就是所谓的“延迟删除”功能。…

HTB Freelancer

Freelancer user nmap ➜ htb nmap -A 10.129.221.155 -T 4 Starting Nmap 7.80 ( https://nmap.org ) at 2024-06-02 09:19 CST NSE Timing: About 97.92% done; ETC: 09:24 (0

PostgreSQL源码分析——COPY

导入数据的几种方式 在进行数据导入导出时常会用到copy命令&#xff0c;语法使用可参考下面这篇博文 [Postgres] Bulk Insert and Export Data with csv Files with Postgres copy Command。通常导入数据的方法&#xff0c;可以通过insert的方式&#xff08;insert into t1 va…

BC153 [NOIP2010]数字统计

数字统计 一.题目描述二.输入描述&#xff1a;三.输出描述&#xff1a;四.数字范围五.题目思路六.代码实现 一.题目描述 请统计某个给定范围[L, R]的所有整数中&#xff0c;数字2出现的次数。 比如给定范围[2, 22]&#xff0c;数字2在数2中出现了1次&#xff0c;在数12中出现1次…

如何恢复iPhone iCloud云盘资料删除?给出建议

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

【Java】已解决com.mysql.cj.jdbc.exceptions.CommunicationsException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决com.mysql.cj.jdbc.exceptions.CommunicationsException异常 一、分析问题背景 com.mysql.cj.jdbc.exceptions.CommunicationsException是Java程序在使用MySQL Connector/J与…

目标检测—Fast RCNN

介绍Fast R-CNN之前先简单回顾一下R-CNN和SPP-net R-CNN&#xff08;Regions with CNN&#xff09; affine image wraping 解析 Bounding Box Regression&#xff08;边界框回归&#xff09; 如何回归&#xff1f; 问题1&#xff1a;为什么要使用相对坐标差&#xff1f; …

全面对比与选择指南:Milvus、PGVector、Zilliz及其他向量数据库

本文全面探讨了Milvus、PGVector、Zilliz等向量数据库的特性、性能、应用场景及选型建议&#xff0c;通过详细的对比分析&#xff0c;帮助开发者和架构师根据具体需求选择最合适的向量数据库解决方案。 文章目录 向量数据库概述向量数据库的关键功能向量数据库的扩展和选择向量…

立创开源学习篇(一)

1.机壳地 外面包围的一圈是机壳地&#xff0c;和金属外壳相连与电路板的GND不相连&#xff1a;&#xff08;大疆很多产品有此设计&#xff09; 屏蔽和接地&#xff1a;通过在电路板周围打孔&#xff0c;并连接到机壳地&#xff0c;可以形成有效的电磁屏蔽层&#xff08;形成金…

004、KMeans和DBSCAN的比较

KMeans 聚类 工作原理 选择K个初始中心点&#xff08;可以随机选择或使用其他方法&#xff09;。迭代过程&#xff1a; 分配每个数据点到最近的中心点&#xff1a;计算每个数据点到所有中心点的距离&#xff0c;将数据点分配到最近的中心点所属的簇。更新中心点&#xff1a;计…