LeetCode 1527, 54,114

目录

  • 1527. 患某种疾病的患者
    • 题目链接
    • 要求
    • 知识点
    • 思路
    • 代码
  • 54. 螺旋矩阵
    • 题目链接
    • 标签
    • 思路
    • 代码
  • 114. 二叉树展开为链表
    • 题目链接
    • 标签
    • 前序遍历
      • 思路
      • 代码
    • 前驱
      • 思路
      • 代码

1527. 患某种疾病的患者

题目链接

1527. 患某种疾病的患者

  • Patients的字段为patient_idpatient_nameconditions

要求

查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。I 类糖尿病的代码总是包含前缀 DIAB1

任意顺序 返回结果表。

知识点

  1. like:对字符串做限制,通常与%搭配使用,%表示不限字符,并且不限字符的个数。例如select * from Users where name like '张%',假设Users表中有name张三丰、张四、老张、李四的数据,那么这条语句返回的是name张三丰、张四的数据。

思路

由于 I 类糖尿病的代码总是包含前缀 DIAB1,并且 ‘conditions’ (疾病)包含 0 个或以上的疾病代码,以 空格 分隔,所以在查询时要将conditions限制到DIAB1%conditions第一个单词的前缀为DIAB1)或% DIAB1%DIAB1不是conditions的第一个单词,但有一个其他单词的前缀为DIAB1)中。

代码

selectpatient_id,patient_name,conditions
fromPatients
whereconditions like 'DIAB1%'
orconditions like '% DIAB1%'

54. 螺旋矩阵

题目链接

54. 螺旋矩阵

标签

数组 矩阵 模拟

思路

按照顺时针螺旋顺序遍历矩阵很像深度优先搜索,都是以一个方向走到头,然后再探测别的方向。所以本题可以采用深度优先搜索的思想来解决。

先做好预备工作:使用一个boolean[][] vis来存储各个元素是否被遍历过,并且使用一个int[][] dir = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}来作方向数组,这个方向数组的方向依次为向右、向下、向左、向上,也就是题目中的顺时针螺旋顺序,如果不是这个顺序,则会出问题。

然后再进行遍历:本题的搜索需要在传入 矩阵 和 当前元素的坐标 外,传入当前遍历的方向,然后 标记遍历过当前元素 并 将其放入结果链表,接着依次按照向右、向下、向左、向上的方向进行深搜,搜索的前提是下一个元素在矩阵中(对下一个元素的索引做检查),并且下一个元素没有遍历过(对下一个元素的vis做检查)。当搜索到最后一个元素时,它无论向哪个方向都无法再进行搜索(因为此时vis中所有元素都是true,也就是说所有元素已经被遍历过了),所有的递归就此终结。

最后返回结果链表即可。

代码

class Solution {public List<Integer> spiralOrder(int[][] matrix) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) { // 如果矩阵为空return new ArrayList<>(); // 则返回空集合}int row = matrix.length, col = matrix[0].length;res = new ArrayList<>(row * col); // 初始化结果链表大小为row * col,避免链表扩容影响性能vis = new boolean[row][col]; // 初始化判断数组dfs(matrix, 0, 0, 0); // 从0行0列开始向右遍历return res;}// 从r行c列开始 沿d方向 遍历private void dfs(int[][] matrix, int r, int c, int d) {vis[r][c] = true; // 记录遍历过本元素res.add(matrix[r][c]); // 将当前元素加入结果链表for (int k = 0; k < 4; k++) { // 分别向4个方向探测int kd = (d + k) % 4; // 获取方向数组的索引int kr = r + dir[kd][0], kc = c + dir[kd][1]; // 获取 沿kd方向前进的 下一个元素的 索引if (!(kr >= 0 && kr < matrix.length&& kc >= 0 && kc < matrix[0].length) // 如果这个元素不在矩阵中|| vis[kr][kc]) { // 或者这个元素被遍历过了continue; // 则跳过这个元素}dfs(matrix, kr, kc, kd); // 从这个元素开始 沿kd方向 遍历}}private List<Integer> res; // 结果链表private boolean[][] vis; // 判断某个元素是否已经被遍历过了private int[][] dir = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 方向数组,分别为向右、向下、向左、向上
}

114. 二叉树展开为链表

题目链接

114. 二叉树展开为链表

标签

栈 树 深度优先搜索 链表 二叉树

前序遍历

思路

本题的简单思路十分简单,使用前序遍历将二叉树中所有的节点存入链表,然后再将链表中的所有节点按顺序调整指向:让前一个节点的左指针指向null,右指针指向当前节点,从而形成链表的结构。

代码

class Solution {public void flatten(TreeNode root) {if (root == null) {return;}List<TreeNode> list = new ArrayList<>();preOrder(root, list);for (int i = 1; i < list.size(); i++) {TreeNode prev = list.get(i - 1); // 获取前一个节点TreeNode curr = list.get(i); // 获取当前节点prev.left = null; // 让前一个节点的左子节点指向nullprev.right = curr; // 将当前节点 放到 前一个节点的右子节点处}}// 前序遍历二叉树,将节点按照前序保存到list中private void preOrder(TreeNode curr, List<TreeNode> list) {if (curr == null) {return;}list.add(curr);preOrder(curr.left, list);preOrder(curr.right, list);}
}

前驱

思路

什么叫做前驱节点?前驱节点指的是以中序遍历遍历二叉树时,某一个节点的前一个节点(前驱节点是当前节点左子树中的一路往右子节点遍历最终节点)。在二叉搜索树,前驱节点是小于当前节点值的最大节点。

为什么要讲前驱节点?因为对于一个节点来说,前序遍历总是先处理当前值,然后再遍历左子节点,最后是右子节点。从而在前序遍历中,前驱节点的下一个节点就是当前节点的右子节点

所以只需要在当前节点有左子节点时,将左子节点前驱节点这段二叉树插入到当前节点右子节点之间,然后更新当前节点为插入之后的右子节点即可。对于没有左子节点的节点,无需理会,直接更新当前节点为下一个右子节点。

例如对于以下二叉树:
二叉树1
先寻找节点1的前驱节点,发现其前驱节点为节点4,将节点4与节点5建立连接,并将节点2放到节点5原本的位置上,然后当前节点更新到节点2,如下图所示:
二叉树2
接着寻找节点2的前驱节点,发现其前驱节点为节点3,将节点3与节点4建立联系,并将节点3放到节点4原本的位置上,接着就不存在有左子节点的节点了,如下图所示:
二叉树3

代码

class Solution {public void flatten(TreeNode root) {TreeNode curr = root;while (curr != null) {if (curr.left != null) { // 如果左子节点不为空,则进行操作TreeNode next = curr.left; // 先保存左子节点TreeNode predecessor = predecessor(curr); // 获取当前节点的前驱节点predecessor.right = curr.right; // 让前驱节点的右指针 指向 当前节点的右子节点curr.left = null; // 让当前节点的左指针 指向 nullcurr.right = next; // 让当前节点的右指针 指向 左子节点}curr = curr.right; // 更新当前节点}}// 寻找curr的前驱节点private TreeNode predecessor(TreeNode curr) {TreeNode pre = curr.left; // 先获取当前节点的左子节点while (pre.right != null) {pre = pre.right; // 一路往右子节点方向遍历}return pre; // 找到最终节点}
}

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

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

相关文章

C++ | Leetcode C++题解之第205题同构字符串

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isIsomorphic(string s, string t) {unordered_map<char, char> s2t;unordered_map<char, char> t2s;int len s.length();for (int i 0; i < len; i) {char x s[i], y t[i];if ((s2t.coun…

Webpack: 7 款常用的性能分析工具

概述 Webpack 最大的优势在于它的功能非常强大、全面&#xff0c;加之繁荣活跃的组件生态&#xff0c;已经足够应对几乎所有 Web 构建需求&#xff0c;包括&#xff1a;SPA、MPA、SSR、桌面应用、Node 程序、WebAssemsbly、PWA、微前端等等&#xff0c;所以即使在近几年工程化…

Python | Leetcode Python题解之第205题同构字符串

题目&#xff1a; 题解&#xff1a; class Solution:def isIsomorphic(self, s: str, t: str) -> bool:dicts Counter(s)dictt Counter(t) if list(dicts.values()) ! list(dictt.values()):return Falsefor i in range(len(s)):inds list(dicts.keys()).index(s…

C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏

前言 今天大姚给大家分享一款由C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏&#xff1a;SeeSharpSnake。 项目特点 该仓库中的项目文件和脚本可以用多种不同的配置构建相同的游戏&#xff0c;每个配置生成的输出大小也不同。 项目源码运行 F5 运行 SeeSharpSnake项目&…

E4A视频APP源码电视盒子Coolpoint酷点电视4.5版后端苹果cms

电视盒子酷点TV版4.5影视APP源码后端对接苹果CMS&#xff0c;此版带会员功能,对接的是 如意验证1.71版苹果cms后端APP 电视TV4.5版,会员功能带注册邀请,绑定邮箱,邮箱找回密码,修改新密码,卡密充值,签到,积分兑换会员&#xff1b; 自带10个解析线路,有电视直播功能,首页滚动公…

Java教程之IO模式精讲,NIO+BIO

第一章 BIO、NIO、AIO介绍 背景 在java的软件设计开发中&#xff0c;通信架构是不可避免的&#xff0c;我们在进行不同系统或者不同进程之间的数据交互&#xff0c;或 者在高并发下的通信场景下都需要用到网络通信相关的技术&#xff0c;对于一些经验丰富的程序员来说&#x…

第11章 规划过程组(11.5创建WBS)

第11章 规划过程组&#xff08;一&#xff09;11.5创建WBS&#xff0c;在第三版教材第380~383页&#xff1b; 文字图片音频方式 视频22 第一个知识点&#xff1a;主要输入 1、项目管理计划 范围管理计划 定义了如何根据项目范围说明书创建WBS2、项目文件 项目范围说明…

十六进制计数器

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 参考代码 描述 请用Verilog设计十六进制递增计数器电路&#xff0c;每个时钟周期递增1。 电路的接口如下图所示。Q[3:0]中&#xff0c;Q[3]是高位。 接口电路图如下&#xff1a; 输入描述&#xff1a; input …

操作系统期末复习考题三(不挂科系列)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文☀️☀️☀️三、总结&#x1f353;&#x1f353;&#x1f353; 一、前言&#x1f680;&#x1f680;&am…

java基于ssm+jsp 房屋租赁系统

1 管理员登录 管理员输入个人的用户名、密码登录系统&#xff0c;这时候系统的数据库就会在进行查找相关的信息&#xff0c;如果我们输入的用户名、密码不正确&#xff0c;数据库就会提示出错误的信息提示&#xff0c;同时会提示管理员重新输入自己的用户名、密码&#xff0c;…

了解WPF控件:OpenFileDialog常用属性与用法(十六)

掌握WPF控件&#xff1a;熟练OpenFileDialog常用属性&#xff08;十六&#xff09; OpenFileDialog控件在WPF中用于需要用户指定文件路径&#xff0c;为用户提供了一个直观且易用的界面来浏览和选择本地文件系统中的文件。例如&#xff0c;当用户需要打开一个已存在的文本文件…

C++自定义智能指针

template <class T> class counted_ptr;// 智能指针引用计数类 template <class T> class Ref_Ptr {friend class counted_ptr<T>; private:T* m_pTtr; // 实际的指针size_t counted_ptr; // 引用计数Ref_Ptr(T* p);virtual ~Ref_Ptr(); };template <clas…

【Arduino】实验使用ESP32控制可编程继电器制作跑马灯(图文)

今天小飞鱼实验使用ESP控制继电器&#xff0c;为了更好的掌握继电器的使用方法这里实验做了一个跑马灯的效果。 这里用到的可编程继电器&#xff0c;起始原理并不复杂&#xff0c;同样需要ESP32控制针脚输出高电平或低电平给到继电器&#xff0c;继电器使用这个信号控制一个电…

如何焊铜管 量测射频前端模块

先说结论 要做Port Extension待测物要上电 且根据逻辑表给Enable pin上电网分输入功率 不要太大 -20dBm即可铜管的接地 要足够 以及足够近铜管与待测物之间 必要时 隔一颗电容不要将匹配元件 也包含在量测范围讯号针不要直接焊在焊盘上 首先 铜管要做Port…

50-3 内网信息收集 - 域环境搭建

搭建准备: 在搭建准备阶段,我们需要准备三台 Windows 虚拟机:Windows Server 2012、Windows 7 和 Windows Server 2008。接下来,我们将配置 Windows Server 2012 作为域控制器,而 Windows 7 和 Windows Server 2008 将作为成员机加入域。建议保持这三台虚拟机的内存不超过…

(漏洞检查项) | 任意文件包含漏洞 file-include

(漏洞检查项)|任意文件包含漏洞 file-include 漏洞场景 1.含有动态包含语句 2.有类似于文件读取的url 漏洞描述 攻击者可以利用任意文件包含漏洞&#xff0c;读取任意文件&#xff0c;对服务器造成危害。 程序开发人员为了代码的灵活性&#xff0c;常常会将包含文件的路径…

influxdb时序数据库使用

influxdb时序数据库使用 1.1.免费无云influx申请1.2.Telegraf安装1.3.influxdb安装mac安装Redhat && Centos安装docker安装Kubernetes安装windows安装 1.4.influx CLI 安装1.5.influx命令行界面1.5.influx配置项权限认证配置管理 API 令牌 InfluxDB 是一个开源分布式时…

用通俗易懂方式讲解:快速部署大模型 ChatGLM3 并进行推理

在深入了解了一些大模型的知识之后&#xff0c;最好的方法是亲自动手搭建一个开源的大模型&#xff0c;以更深入地理解其工作原理。 在此基础上&#xff0c;我们将以 ChatGLM3 为例进行部署及推理&#xff0c;从而进一步探索大模型的应用和实践。 ChatGLM3简介&#xff1a; …

Alibaba Cloud Linux详解_操作系统兼容性_alinux稳定性全解析

Alibaba Cloud Linux是阿里云自研的稳定、安全、高性能的服务器Linux操作系统&#xff0c;完全兼容CentOS/RHEL生态和操作方式&#xff0c;又阿里云提供免费提供长期支持和维护LTS。Alibaba Cloud Linux是目前阿里云服务器最大规模使用的操作系统之一&#xff0c;可部署在Web网…

无刷直流电机(BLDCM)位置识别SVPWM控制

无刷直流电机&#xff0c;即BLDCM&#xff0c;在各个行业应用非常广泛。我们最熟悉的是在四轴飞行器中的应用&#xff0c;其中的电机基本都是BLDCM。除此之外&#xff0c;汽车电子、家用电器、航空航天、办公自动化、机器人等领域都有重要应用。 梯形波/方波无刷直流电机被称为…