LeetCode HOT100 (23、32、33)

news2024/9/29 13:29:29

目录

23、合并K个升序链表

32、最长有效括号

 33、搜索旋转排序数组


23、合并K个升序链表

思路:采用顺序合并的方法,用一个变量 ans 来维护以及合并的链表,第 i 次循i 个链表和 ans合并,答案保存到 ans中。

代码: 

/**
 * 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 mergeKLists(ListNode[] listNodes){
        ListNode ans = null;
        for (int i = 0; i < listNodes.length; i++) {
            ans = mergeTwoLists(ans,listNodes[i]);
        }
        
        return ans;
    }

    public ListNode mergeTwoLists(ListNode a, ListNode b){
        //当有一个为空时,就返回另一个链表
        if (a == null || b == null){
            return a != null ? a : b;
        }

        //创建虚拟头结点的临时链表
        ListNode head = new ListNode(0);
        ListNode tail = head;
        ListNode aPtr = a;
        ListNode bPtr = b;

        while (aPtr != null && bPtr != null){
            if (aPtr.val < bPtr.val) {
                tail.next = aPtr;
                aPtr = aPtr.next;
            } else {
                tail.next = bPtr;
                bPtr = bPtr.next;
            }

            tail = tail.next;

        }

        tail.next = (aPtr!=null ? aPtr : bPtr);

        return head.next;


    }
}

32、最长有效括号

思路:借助栈,遇到的每个 ‘(’,我们将它的下标放入栈中,对于遇到的每个 ‘)’,我们先弹出栈顶元素表示匹配了当前右括号。

  • 如果栈为空,说明当前的右括号为没有被匹配的右括号,我们将其下标放入栈中来更新我们之前提到的「最后一个没有被匹配的右括号的下标」
  • 如果栈不为空,当前右括号的下标减去栈顶元素即为「以该右括号为结尾的最长有效括号的长度。

代码:

class Solution {
    public int longestValidParentheses(String s) {
            //最大长度
            int maxans = 0;
            Stack<Integer> stack = new Stack<>();
            //首先弹入一个虚拟下标,防止出现第一个即为')'而需要分类讨论的情况
            stack.push(-1);
            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == '(') {
                    stack.push(i);
                } else {
                    stack.pop();
                    if (stack.isEmpty()) {
                        stack.push(i);
                    } else {
                        maxans = Math.max(maxans, i - stack.peek());
                    }
                }
            }
            return maxans;
        }
}

 33、搜索旋转排序数组

 

思路:使用二分查找(双指针)。我们将数组从中间分开成左右两部分的时候,一定有一部分的数组是有序的。例如,我们从 6 这个位置分开以后数组变成了 [4, 5, 6] 和 [7, 0, 1, 2] 两个部分,其中左边 [4, 5, 6] 这个部分的数组是有序的,其他也是如此。

  • 如果[1,mid - 1]是有序数组,且target 的大小满足[nums[], nums[mid), 则我们应该将搜索范围缩小至[1, mid一1],否则在[mid + 1,r]中寻找。
  • 如果[mid, r] 是有序数组,且target 的大小满足(nums[mid + 1], nums[r1],则我们应该将搜索范围缩小至[mid + 1,r],否则在[1,mid - 1] 中寻找。

 (图源自leetcode)

代码:

class Solution {
    public int search(int[] nums, int target) {
        int n = nums.length;
        //数组为空时
        if (n == 0) {
            return -1;
        }
        //数组长度为1时
        if (n == 1) {
            return nums[0] == target ? 0 : -1;
        }
        int l = 0, r = n - 1;
        while (l <= r) {
            int mid = (l + r) / 2;
            if (nums[mid] == target) {
                return mid;
            }
            //如果此时数组有序,双指针收缩
            if (nums[0] <= nums[mid]) {
                if (nums[0] <= target && target < nums[mid]) {
                    r = mid - 1;
                } else {
                    l = mid + 1;
                }
            } else {        //如果此时无序,则另一半一定是有序的
                if (nums[mid] < target && target <= nums[n - 1]) {
                    l = mid + 1;
                } else {
                    r = mid - 1;
                }
            }
        }
        return -1;
    }
}

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

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

相关文章

数据存储结构B+树 vs LSM Tree

关于存储的几个概念对于一个存储系统来说&#xff0c;底层的存储结构基本上就决定了这个存储系统的功能&#xff0c;或者说性能偏向。比如使用B树的存储系统&#xff0c;那就是查询友好的&#xff1b;使用倒排索引结构的&#xff0c;那就主要是用来做全文搜索的&#xff1b;使用…

idea debug elasticsearch8.6.2 源码

前置依赖&#xff1a; gradle 7.5.1&#xff1a;Gradle | Releases openJDK 17&#xff1a;https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe idea&#xff1a;IntelliJ IDEA 2022.1 (Ultimate Edition) 1、下载源码 8.6.2 zip包 并解压 地址&…

算法训练营 day57 动态规划 最长公共子序列 不相交的线 最大子序和(动态规划)

算法训练营 day57 动态规划 最长公共子序列 不相交的线 最大子序和&#xff08;动态规划&#xff09; 最长公共子序列 1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。…

spark为什么比hadoop快

网上一堆人根本对计算框架一知半解就出来糊弄人&#xff0c;常见解答有&#xff1a; spark是基于内存计算&#xff0c;所以快。这跟废话似的&#xff0c;mr计算的时候不也是基于内存&#xff1f; mr shuffle落盘。这也是胡扯&#xff0c; spark shuffle不落盘&#xff1f; 实际…

智能家居Homekit系列一智能灯泡

一、什么是智能灯 传统的灯泡是通过手动打开和关闭开关来工作。有时&#xff0c;它们可以通过声控、触控、红外等方式进行控制&#xff0c;或者带有调光开关&#xff0c;让用户调暗或调亮灯光。 智能灯泡内置有芯片和通信模块&#xff0c;可与手机、家庭智能助手、或其他智能…

[C++]string类模拟实现

目录 前言&#xff1a; 1. string框架构造 2. 默认函数 2.1 构造函数 2.2 析构函数 2.3 拷贝构造 2.4 赋值重载 3. 迭代器 4. 整体程序 前言&#xff1a; 本篇文章模拟实现了C中string的部分功能&#xff0c;有助于大家了解和熟悉string类&#xff0c;虽然这个类不难实…

SSM知识快速复习

SSM知识快速复习SpringIOCDIIOC容器在Spring中的实现常用注解Autowired注解的原理AOP相关术语作用动态代理实现原理事务Transactional事务属性&#xff1a;只读事务属性&#xff1a;超时事务属性&#xff1a;回滚策略事务属性&#xff1a;事务隔离级别事务属性&#xff1a;事务…

JSP+ACCESS网上拍卖平台系统

技术&#xff1a;Java、JSP等摘要&#xff1a;电子商务就是通过互联网来进行的各项商务活动&#xff0c;包括广告、交易、支付、服务等活动。电子商务源于英文Electronic Commerce,简写为EC或E-Commerce。它是人类社会、经济、科学、文化发展的必然产物&#xff0c;是信息化社会…

【计算机考研408】置换选择排序 + 代码 PAT 甲级 1171 Replacement Selection

王道-置换选择排序b站教学视频 置换选择排序的流程 图片比文字更好理解&#xff0c;故不加文字解释 当当前工作区已经满了并且找不到合适的放入当前归并段的元素的时候&#xff0c;开始生成下一个归并段。 此后重复上述过程。 计算机考研可能考察置换选择排序的知识点 …

网易蜗牛读书产品体验报告(1.9.6版本)

本文导览本文是网易蜗牛读书的产品体验报告&#xff0c;在移动阅读市场&#xff0c;网易蜗牛读书以其独特的深度阅读和领读人的阅读机制吸引了一大批的阅读爱好者和忠实用户。本文通过对网易蜗牛读书的体验分析&#xff0c;希望进一步加深对网易蜗牛读书产品的认识了解。产品概…

详细的IO面试题汇总

IO 流简介 IO 即 Input/Output&#xff0c;输入和输出。数据输入到计算机内存的过程即输入&#xff0c;反之输出到外部存储&#xff08;比如数据库&#xff0c;文件&#xff0c;远程主机&#xff09;的过程即输出。数据传输过程类似于水流&#xff0c;因此称为 IO 流。IO 流在…

pom依赖产生的各种问题

文章目录问题一(org.apache.ibatis.session.Configuration)解决方法问题二(ERROR StatusLogger No log4j2)解决方法问题三(com.google.common.util.concurrent)解决方法问题四(start bean documentationPluginsBootstrapper)解决方法问题五(Unable to infer base url. )解决办法…

(01)Unity 中使用 HDRP

概述Unity在2019.2版本中推出HDRP&#xff08;高清渲染管线&#xff09;&#xff0c;目的是为了提高图形质量&#xff0c;实现从照片写实到风格化的图像。先看一下官方对HDRP的概述&#xff1a;高清渲染管线 &#xff08;HDRP&#xff09; 是由 Unity 构建的高保真脚本化渲染管…

【golang/go语言】Go语言之反射

本文参考了李文周的博客——Go语言基础之反射。 一、反射初识 1. 什么是反射 在计算机科学中&#xff0c;反射是指计算机程序在运行时&#xff08;run time&#xff09;可以访问、检测和修改它本身状态和行为的一种能力。用比喻来说&#xff0c;反射就是程序在运行的时候能够…

【genius_platform软件平台开发】第八十八讲:arm公司的V架构和内核发展史(整理)

1. ARM公司简介 ARM&#xff08;Advanced RISC Machines&#xff09;有三种含义&#xff1a;它是一个公司的名称、它是一类微处理器的通称、它是一种技术的名称。 ARM 公司是微处理器行业的一家知名企业&#xff0c;它是知识产权供应商&#xff0c;设计基于ARM体系的处理器&a…

5-Azidopentanoic acid,79583-98-5,5-Azidopentanoic COOH具有高效稳定,高特异性

5-Azidopentanoic acid&#xff0c;5-Azidopentanoic COOH&#xff0c;5-叠氮基戊酸产品规格&#xff1a;1.CAS号&#xff1a;79583-98-52.分子式&#xff1a;C5H9N3O23.分子量&#xff1a;143.074.包装规格&#xff1a;1g&#xff0c;5g&#xff0c;10g&#xff0c;包装灵活&a…

Spring Data JPA 之 理解 Persistence Context 的核心概念

21 理解 Persistence Context 的核心概念 21.1 Persistence Context 相关核心概念 21.1.1 EntityManagerFactory 和 Persistence Unit 按照 JPA 协议⾥⾯的定义&#xff1a;persistence unit 是⼀些持久化配置的集合&#xff0c;⾥⾯包含了数据源的配置、EntityManagerFacto…

WideDeep模型

google提出的Wide&deep模型&#xff0c;将线性模型与DNN很好的结合起来&#xff0c;在提高模型泛化能力的同时&#xff0c;兼顾模型的记忆性。wide&deep这种将线性模型与DNN的并行连接模式&#xff0c;后来称为推荐领域的经典模式&#xff0c;奠定了后面深度学习模型的…

Containerd容器运行时将会替换Docker?

文章目录一、什么是Containerd&#xff1f;二、Containerd有哪些功能&#xff1f;三、Containerd与Docker的区别四、Containerd是否会替换Docker&#xff1f;五、Containerd安装、部署和使用公众号&#xff1a; MCNU云原生&#xff0c;欢迎微信搜索关注&#xff0c;更多干货&am…

一条 SQL 查询语句是如何执行的?

MySQL是典型的C/S架构&#xff08;客户端/服务器架构&#xff09;&#xff0c;客户端进程向服务端进程发送一段文本&#xff08;MySQL指令&#xff09;&#xff0c;服务器进程进行语句处理然后返回执行结果。 问题来了。服务器进程对客户端发送的请求究竟做了什么处理呢&#…