LeetCode 1527, 54,114

news2025/1/18 18:43:32

目录

  • 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)中。

代码

select
    patient_id,
    patient_name,
    conditions
from
    Patients
where
    conditions like 'DIAB1%'
or
    conditions 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; // 让前一个节点的左子节点指向null
            prev.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; // 让当前节点的左指针 指向 null
                curr.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.coloradmin.cn/o/1881174.html

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

相关文章

InnoDB 表空间1---独立表空间

表空间是一个抽象的概念&#xff0c;对于系统表空间来说&#xff0c;对应着文件系统中一个或多个实际文件&#xff1b;对于每个独立表空间来说&#xff0c;对应着文件系统中一个名为表名.ibd的实际文件。大家可以把表空间想象成被切分为许许多多个页的池子&#xff0c;当我们想…

香港回归庆典开序幕,蝴蝶效应集团齐献礼

6月29日,香港各界庆典委员会庆祝香港回归祖国27周年活动启动礼在维多利亚公园举行。香港特区行政长官李家超、中央政府驻港联络办主任郑雁雄、香港各界庆典委员会主席谭锦球和筹委会主席陈鸿道等出席并致辞。 作为香港物流行业推广的领军企业,香港蝴蝶效应集团也以优秀企业代表…

SSH 无密登录配置流程

一、免密登录原理 非对称加密&#xff1a; 由于对称加密的存在弊端&#xff0c;就产生了非对称加密&#xff0c;非对称加密中有两个密钥&#xff1a;公钥和私钥。公钥由私钥产生&#xff0c;但却无法推算出私钥&#xff1b;公钥加密后的密文&#xff0c;只能通过对应的私钥来解…

Redux实现Token持久化

业务背景: Token数据具有一定的时效时间&#xff0c;通常在几个小时&#xff0c;有效时间内无需重新获取&#xff0c;而基于Redux的存储方式又是基于内存的&#xff0c;刷新就会丢失&#xff0c;为了保持持久化&#xff0c;我们需要单独做处理 解决方案&#xff1a; 使用redu…

redis实战-短信登录

基于session的登录流程 session的登录流程图 1. 发送验证码 用户在提交手机号后&#xff0c;会校验手机号是否合法&#xff0c;如果不合法&#xff0c;则要求用户重新输入手机号 如果手机号合法&#xff0c;后台此时生成对应的验证码&#xff0c;同时将验证码进行保存&#x…

No module named ‘MySQLdb‘

python 运行代码的时候遇到No module named ‘MySQLdb’报错如何解决&#xff1f; 解决办法 如果没有安装可以先安装以下依赖库 pip install PyMySQL如果已经安装了PyMySQL&#xff0c;仍然报MySQLdb模块找不到&#xff0c;可以尝试安装以下依赖库。 pip install mysqlclient

LNMP架构搭建Discuz论坛

LNMP架构是一种用于搭建Web服务器环境的常用架构&#xff0c;由Linux、Nginx、MySQL和PHP组成 组成功能Linux作为操作系统的基础&#xff0c;提供稳定的环境Nginx作为反向代理服务器&#xff0c;处理客户端的请求并将他们转发给后端的应用服务器MySQL作为关系型数据库管理系统…

【驱动篇】龙芯LS2K0300之i2c设备驱动

实验背景 由于官方内核i2c的BSP有问题&#xff08;怀疑是设备树这块&#xff09;&#xff0c;本次实验将不通过设备树来驱动aht20&#xff08;i2c&#xff09;模块&#xff0c;大致的操作过程如下&#xff1a; 模块连接&#xff0c;查看aht20设备地址编写device驱动&#xff…

力扣931. 下降路径最小和

Problem: 931. 下降路径最小和 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义状态&#xff1a;我们定义dp[i][j]为从矩阵的第一行到达位置(i, j)的最小下降路径和。 2.初始化状态&#xff1a;对于矩阵的第一行&#xff0c;即i 0时&#xff0c;dp[0][j]就是矩阵的第一…

ESP8266[ 关于-巴发云MQTT/TCP:arduino 设置回调函数 ] 日志2024/6/29

ESP8266 [ 关于-巴发云MQTT/TCP:arduino 设置回调函数 ] 日志2024/6/29 arduino库:#include <PubSubClient.h> 回调函数 是其库设置好的 可以改名字 这里只写上关键代码 设置客户端为 A 关键代码: A.setCallback(回调名) //MQTT 回调处理mqttmsgg(自定义…

光速入门 Tailwind CSS

文章目录 入门安装IDE 设置使用预编译器生产环境优化 基础概念分层指令tailwindlayerapplyconfig 函数theme()screen() 基础案例怎么设置属性任意值&#xff1f;hover 父元素时&#xff0c;怎么选中子元素添加样式&#xff1f;添加 animation 动画 配置主题 Tailwind CSS 中文网…

Unity 数据持久化【PlayerPrefs】

1、数据持久化 文章目录 1、数据持久化PlayerPrefs基本方法1、PlayerPrefs概念2、存储相关3、读取相关4、删除数据思考 信息的存储和读取 PlayerPrefs存储位置1、PlayerPrefs存储的数据在哪个位置2、PlayerPrefs 数据唯一性思考 排行榜功能 2、Playerprefs实践1、必备知识点-反…

【SQLmap】常用命令

文章目录 实际使用案例常用命令基本命令数据库指纹识别用户信息用户权限数据库枚举数据导出密码哈希操作系统命令执行文件操作代理和网络参数指定保存恢复自动搜索注入智能模式等级设置自动注入WAF 绕过杂项帮助和支持 SQLmap 是一款开源的自动化 SQL 注入检测和利用工具&#…

一文读懂Feed流

前言&#xff1a;当前最流行的Feed流产品有微博、微信朋友圈、头条的资讯推荐、快手抖音的视频推荐等&#xff0c;还有一些变种&#xff0c;比如私信、通知等&#xff0c;这些系统都是Feed流系统。Feed流是Feed 流&#xff0c;Feed的本意是饲料&#xff0c;Feed流的本意就是有…

【python】python基于tkinter的学生成绩管理系统(源码+数据文件)【独一无二】

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

AI绘画-Stable Diffusion 原理介绍及使用

引言 好像很多朋友对AI绘图有兴趣&#xff0c;AI绘画背后&#xff0c;依旧是大模型的训练。但绘图类AI对计算机显卡有较高要求。建议先了解基本原理及如何使用&#xff0c;在看看如何实现自己垂直行业的绘图AI逻辑。或者作为使用者&#xff0c;调用已有的server接口。 首先需…

20240701 每日AI必读资讯

&#x1f3eb;AI真炼丹&#xff1a;整整14天&#xff0c;无需人类参与 - 英矽智能推出全球首个AI参与决策的生物学实验室&#xff0c;实现了14天内完成靶点发现和验证的全自动化闭环实验。 - 该实验室由PandaOmics平台驱动&#xff0c;集成多种预测模型和海量数据&#xff0…

springboot基础入门2(profile应用)

Profile应用 一、何为Profile二、profile配置方式1.多profile文件方式2.yml多文档方式 三、加载顺序1. file:./config/: 当前项目下的/config目录下2. file:./ &#xff1a;当前项目的根目录3. classpath:/config/:classpath的/config目录4. classpath:/ : classpath的根目录 四…

ffmpeg使用bmp编码器把bgr24编码为bmp图像

version #define LIBAVCODEC_VERSION_MAJOR 60 #define LIBAVCODEC_VERSION_MINOR 15 #define LIBAVCODEC_VERSION_MICRO 100 note 不使用AVOutputFormat code void CFfmpegOps::EncodeBGR24ToBMP(const char* infile, const char* width_str, const char* height_str…

Python数据分析-风湿关节炎生存分析

一、研究背景和意义 类风湿关节炎&#xff08;RA&#xff09;是一种慢性炎症性疾病&#xff0c;主要影响关节&#xff0c;但也可能影响身体的其他部分。RA的病因尚不完全清楚&#xff0c;但已知其涉及免疫系统的异常反应。患者的免疫系统错误地攻击自身的关节组织&#xff0c;…