LeetCode Hot 100 笔记

news2024/11/28 8:44:19

文章目录

  • 链表
    • 21. 合并两个有序链表
    • 20. 有效的括号
  • Java

链表

  1. 链表的题目一般都不太难,画图,别怕麻烦

21. 合并两个有序链表

解法一:迭代

  1. 用一个指针cur跟踪当前节点,每次从list1list2中选取小的节点,链接起来
  2. 建立一个头节点,可以简化最开始的判断,也可以简化对空链表的判断
  3. 最后会有一个链表先遍历完,而另一个链表直接链接在后面即可
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        // 建立一个头节点,可以简化代码
        ListNode preHead = new ListNode(0);
        ListNode cur = preHead; // 当前指针,用于更新链表

        while(list1 != null && list2 != null){
            if(list1.val < list2.val){
                cur.next = list1;
                list1 = list1.next;
            }else{
                cur.next = list2;
                list2 = list2.next;
            }
            cur = cur.next;
        }
        cur.next = list1 == null ? list2 : list1;   // 最后只有一个链表没走完,连接到后面即可
        return preHead.next;    // 头节点下一个节点即为所求
    }
}

解法二:递归

  1. 可以把链接的过程看作:list1list2中较小的节点,与其余的所有节点合并的过程
  2. 考虑边界条件:list1list2null时,返回另一个
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
    	// 边界条件,一个为null
        if(list1 == null)   return list2;
        if(list2 == null)   return list1;
        if(list1.val < list2.val){
            list1.next = mergeTwoLists(list1.next, list2);	// list1.next = 其余所有节点合并的结果
            return list1;
        }else{
            list2.next = mergeTwoLists(list1, list2.next);
            return list2;
        }
    }
}

20. 有效的括号

请添加图片描述
思路

  1. 典型的栈的应用,合法的字符串中,右括号需要与左边与其最近的左括号匹配,这与栈LIFO的性质符合。我们可以利用一个栈储存左括号
  2. 遇到左括号,则将其入栈,等待右括号与其匹配。在代码实现上,可以入栈相应的右括号,方便后续匹配(这点之前没有学习到
  3. 遇到右括号,检查栈顶是否匹配。这里有两种情况不合法:一是栈空,二是栈顶不是对应括号。直接返回false;匹配,则出栈顶。
  4. 最后检查栈是否空,非空说明有左括号没有匹配,返回false;空说明均匹配,返回true
  5. ps:奇数长度的字符串,一定是非法的,可以提前排除
class Solution {
    public boolean isValid(String s) {
        int len = s.length();
        if(len % 2 == 1)    return false;   // s长度为奇数,可以直接判错

        Stack<Character> stack = new Stack<>();
        for(int i=0;i<len;++i){
            char ch = s.charAt(i);
            // 这里,遇到左括号后,将对应正确的右括号入栈,方便后面判断
            if(ch == '(')   stack.push(')');
            else if(ch == '[')   stack.push(']');
            else if(ch == '{')   stack.push('}');
            else{
                if(stack.empty() || stack.peek() != ch)   return false; // 右括号:栈空或者不匹配,则不合法,直接返回
                stack.pop();    // 匹配,则出栈顶
            }
        }

        return stack.empty();   // 最后检查栈空
    }
}

Java

  • Stack<Character> stk = new Stack<>():创建一个存储Character类型值的栈
  • bool empty():判断栈是否空
  • peek():返回栈顶元素
  • push():入栈
  • pop():出栈

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

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

相关文章

什么是轻量化,轻量化模型is all your need hhh

其实学了几个小月&#xff0c;我们肯定知道&#xff0c;MLP有多deeper &#xff0c;卷积层有多少层呀 抑或是Transformer架构&#xff0c;大量的参数&#xff0c;只能用huge 来描述&#xff0c; 可实际上我们的设备&#xff0c;有时候并没有服务器那么厉害&#xff0c;所以人…

阿里云认证为什么那么多人考?考试内容难不难?

我国人口密集&#xff0c;每年有大量的毕业生涌进社会&#xff0c;除此之外还有很多进入社会很久的打工人&#xff0c;想要跳槽&#xff0c;到更加挣钱的岗位&#xff0c;待遇更好的公司去。为了能够早日买房、买车&#xff0c;很多人会选择社会热门行业去学习&#xff0c;甚至…

sqli-labs 第七关 多命通关攻略

sqli-labs 第七关 多命通关攻略描述字符串与数值之间的转换判断注入类型返回结果正常输入不正常输入错误输入总结判断注入类型判断是否为字符型注入判断是否为单引号字符型注入判断是否为双引号字符型注入判断是否为数值型注入总结判断注入类型&#xff08;修正版&#xff09;字…

二十六、Docker (2)

&#x1f33b;&#x1f33b; 目录一、Docker的常用命令 (阶段A)1.1 帮助命令1.2 镜像命令1.3 容器命令1.3.1 新建容器并启动1.3.2 列出所有运行的容器1.3.3 退出容器1.3.4 删除容器1.3.5 启动和停止容器的操作1.4 常用的其它命令1.4.1 后台启动容器1.4.2 查看日志1.4.3 查看容器…

如何搭建私域流量?

如今已经进入存量用户时代&#xff0c;越来越多的企业也明白了存量用户的重要性&#xff0c;因此企业都非常重视私域流量的搭建&#xff0c;以挖掘客户的价值。 前言 如今已经进入存量用户时代&#xff0c;越来越多的企业也明白了存量用户的重要性&#xff0c;因此企业都非常重…

安卓搭建好的模拟机,为调试准备

​ 这一节直接分享制作好的虚拟机&#xff0c;镜像系统&#xff0c;以及安卓源码&#xff0c;直接节省你的时间去配置&#xff0c;编译。 下来我来分享下搭建步骤&#xff1a; 1 虚拟机下载vm 12 pro &#xff0c;这个网上百度就可以&#xff0c;原则13,14也都是可以的。 2 下…

移动魔百盒CM311-3-YST-晨星MSO9385-语音首页正常-TTL刷机包

移动魔百盒CM311-3-YST-晨星MSO9385-语音首页正常-TTL刷机包 固件特点&#xff1a; 1、三网通用&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、无开机广告&#xff0c;无系统更新&#xff0c;不在被强制升级&#xff1b; 4、大量精简内置的没用…

熬夜搞了 17000 字,终于把你这个 ES 玩明白了

平常经常用ES(ElasticSearch), 觉得这真是个好玩意儿&#xff0c;所以来分享一篇文章&#xff0c;希望通过这篇文章能让读者大致了解ES是做什么的以及它的使用和基本原理。 可能有的读者航海不知道ES是个啥玩儿&#xff0c;别着急&#xff0c;看完本文后&#xff0c;相信你会了…

import...from... 和 require 如何找到模块位置?

import Vue from "vue"; 为什么不用写相对地址和绝对地址就能够导出 Vue 呢&#xff1f;似乎也没有配置路径&#xff1f;也没有配置映射&#xff0c;那么究竟 from "vue"; 对应的究竟是那个路径呢&#xff1f; 先提出两个可能的方案 1.VS Code/WebStorm …

【每天学习一点新知识】nmap端口扫描

nmap所识别的6个端口状态open(开放的)应用程序正在该端口接收TCP 连接或者UDP报文。发现这一点常常是端口扫描 的主要目标。安全意识强的人们知道每个开放的端口 都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口。 而管理员则试图关闭它们或者用防火墙保护它们以免妨碍…

Java封装公共Result结果返回类

前言 在使用Java开发接口请求中&#xff0c;我们需要对请求进行进行统一返回值&#xff0c;这时候我们自己封装一个统一的Result返回类&#xff0c;下面就介绍下我用的这种的这个类 当然&#xff0c;也可以使用第三方库封装的Result结果返回类&#xff0c;根据个人喜好选择即可…

学习笔记之Vue脚手架(三)

&#xff08;三&#xff09;使用Vue脚手架 使用Vue脚手架&#xff08;三&#xff09;使用Vue脚手架一、创建Vue脚手架1.1 说明1.2 具体步骤二、分析脚手架结构2.1 配置文件2.2 src文件夹2.3 public文件夹一、创建Vue脚手架 1.1 说明 1.Vue脚手架是Vue官方提供的标准开发工具&…

电脑技巧:分享常用的电脑快捷键

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

Nutanix 替代专题 | SmartX 与 Nutanix 超融合市场、技术与性能对比

2022 年 8 月 19 日&#xff0c;Nutanix&#xff08;路坦力&#xff09;宣布中国市场自 2023 财年起将转型为合作伙伴销售主导模式&#xff0c;引起了广泛关注&#xff1b;同时结合当前 IT 基础架构的国产化趋势背景&#xff0c;不少正在使用和考虑使用 Nutanix 产品的企业开始…

js 跨域访问问题解决方法

什么引起了ajax不能跨域请求的问题&#xff1f; ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互&#xff0c;而浏览器出于安全考虑&#xff0c;不允许js代码进行跨域操作&#xff0c;所以会警告。 有什么完美的解决方案么&#xff1f; 解决方案有不少&#xff0c;但…

数字化门店管理|如何让门店数字化管理,更加贴合日常运营细节?

在赋能品牌门店数字化管理的过程中&#xff0c;帷幄既注重前沿 AI 算法带来的技术驱动力&#xff0c;也注重基于门店管理中的真实场景与需求&#xff0c;让算法更贴合业务实际需求&#xff0c;从而带来运营优化与降本增效。 1 月&#xff0c;「帷幄数智空间 Whale SpaceSight」…

植物大战 动态内存——C++

这里是目录标题前言动态内存分布如何理解C语法的增加newnew用法关于struct和class的使用关于free和delete的区别。背会这句话抛异常operator new和operator delete内存池new和delete原理定位newmalloc和new的区别是什么&#xff1f;内存泄漏前言 总结复习前面的知识。 注意&a…

一文带你了解什么是云计算网络运维工程师,以及2023年的就业前景

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.云计算网络运维工程师是做什么的? 二.作为一名云计算网络运…

MyBatis(用于简化JDBC开发)

MyBatis是一款持久层框架&#xff0c;用于简化JDBC开发 持久层&#xff1a;将数据报错到数据库&#xff0c;持久化更改的意思 javaEE三层架构&#xff1a;表现层&#xff08;页面&#xff09;、业务层&#xff08;处理逻辑&#xff09;、持久层&#xff08;数据永久化更改&am…

拉伯证券|人心动了?刚刚,A股、港股大涨!

昨日A股传言较多&#xff0c;引发波动。上一年10月底11月初&#xff0c;也有类似情况。换个视点看&#xff0c;这说明人心开端动了&#xff0c;至于怎样个“思变”法&#xff0c;市场可能现已给出了答案&#xff01; 今天上午&#xff0c;A股大涨&#xff0c;北向资金净流入110…