Leetcode刷题-(21~25)-Java

news2024/11/19 12:42:30

算法是码农的基本功,也是各个大厂必考察的重点,让我们一起坚持写算法题吧。

遇事不决,可问春风,春风不语,即是本心。

我们在我们能力范围内,做好我们该做的事,然后相信一切都事最好的安排就可以啦,慢慢来,会很快,向前走,别回头。

目录

1.合并两个有序链表

2.括号生成

3.合并K个升序链表

4.两两交换链表中的节点

5.K个一组翻转链表


1.合并两个有序链表

题目链接:. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/merge-two-sorted-lists/description/

思路:while循环遍历链表,哪个值小则拼接哪一个即可。

/**
 * 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 node = new ListNode(-1) ;
        ListNode res = node ;

        while(list1 != null && list2 != null){
            if(list1.val <= list2.val){
                node.next = new ListNode(list1.val) ;
                list1 = list1.next ;
            }else{
                node.next = new ListNode(list2.val) ;
                list2 = list2.next ;
            }
            node = node.next ;
        }
        if(list1 != null){
            node.next = list1 ;
        }
        if(list2 != null){
            node.next = list2 ;
        }

        return res.next ;
    }
}
2.括号生成

题目链接:. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/generate-parentheses/

思路:递归生成括号,先加左括号,当左括号小于n就可以加,右括号校友左括号就可以加右括号

class Solution {
    
    public List<String> generateParenthesis(int n) {
        List<String> list = new ArrayList<>() ;
        dfs("",0,0,n,list) ;
        return list ;
    }
    public void dfs(String s, int left, int right, int n, List<String> list){
        if(right == n){
            list.add(s) ;
        }
        if(left<n){
            dfs(s+"(",left+1,right,n,list) ;
        }
        if(right < left){
            dfs(s+")",left,right+1,n,list) ;
        }
   
    }
}
3.合并K个升序链表

题目链接:. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/merge-k-sorted-lists/description/

思路:循环合并两个有序链表即可,思路就是合并两个有序链表,外层加一个循。

/**
 * 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[] lists) {
        ListNode res = null ;
        for(ListNode list : lists){
            res = mergeList(res,list) ;
        }
        return res ;
    }
    public ListNode mergeList(ListNode list1, ListNode list2){
        ListNode list = new ListNode(-1) ;
        ListNode res = list ;
        while(list1 != null && list2 != null){
            if(list1.val <= list2.val){
                list.next = new ListNode(list1.val) ;
                list1 = list1.next ;
            }else{
                list.next = new ListNode(list2.val) ;
                list2 = list2.next ;
            }
            list = list.next ;
        }
        if(list1 != null){
            list.next = list1 ;
        }
        if(list2 != null){
            list.next = list2 ;
        }
        return res.next ;
    }   
}

4.两两交换链表中的节点

题目链接:. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/swap-nodes-in-pairs/description/

思路:本质上就是遍历然后修改指针位置使得链表节点的两两交换,需要保存前置节点,当前节点与下一节点,交换节点注意指针的覆盖。

/**
 * 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 swapPairs(ListNode head) {
        ListNode res = new ListNode(0) ;
        res.next = head ;
        ListNode tmp = res ;
        while(tmp.next != null && tmp.next.next != null){
            // 修改指针交换节点,需要先让3指向4,然后再用4指向3
            ListNode start = tmp.next ;
            ListNode end = tmp.next.next ;
            // 2指向4
            tmp.next = end ;
            // 3指向4的后面一个
            start.next = end.next ;
             // 4指向3
            end.next = start ;
            // 往后走
            tmp = start ;
        }
        return res.next ;

    }
}

5.K个一组翻转链表

题目链接:. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/reverse-nodes-in-k-group/description/
思路:长度大于K用栈模拟链表翻转,长于小于K用对队列模拟。

/**
 * 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 reverseKGroup(ListNode head, int k) {
        ListNode res = new ListNode(0) ;
        ListNode ans = res;
        ListNode tail = head ;
        LinkedList<Integer> stack = new LinkedList<>() ;
        while(tail != null){
            for(int i=0; i<k; i++){
                // 长度不够k,模拟队列进行拼接
                if(tail == null){
                while(!stack.isEmpty()){
                res.next = new ListNode(stack.removeLast()) ;
                res = res.next ;
            }
                return ans.next ;
                }
                stack.push(tail.val) ;
                tail = tail.next ;
            }
            // 长度够模拟栈进行拼接
            while(!stack.isEmpty()){
                res.next = new ListNode(stack.pop()) ;
                res = res.next ;
            }
        }
        return ans.next ;
    }
}

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

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

相关文章

软件应用,物流运单填写模板,物流打印快递单教程,货运单怎么打印视频教程

软件应用&#xff0c;物流运单填写模板&#xff0c;物流打印快递单教程&#xff0c;货运单怎么打印视频教程 一、前言 以下软件操作教程以 佳易王物流货运管理系统软件V17.2为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、物流管理系统打印&a…

【webrtc】m122:PacingController 源码阅读

PacingController 关系与BitrateProber 关系更为密切PacingController 内置BitrateProber G:\CDN\signalapp_webrtc\modules\pacing\pacing_controller.hPacingControllerBitrateProber prober_;可配置BitrateProber 是否激活 PacingController 关系与BitrateProber 关系更为密…

springboot基于spring boot的在线答题微信小程序

摘 要 在线答题微信小程序是考试中重要的一环&#xff0c;在线答题是学生获取任务信息的主要渠道。为了方便学生能够在网站上查看任务信息、考试&#xff0c;于是开发了基于 springboot框架设计与实现了一款简洁、轻便的在线答题微信小程序。本微信小程序解决了在线答题事务中的…

Android Kotlin知识汇总(三)Kotlin 协程

Kotlin的重要优势及特点之——结构化并发 Kotlin 协程让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理&#xff0c;例如网络调用、本地数据访问等任务的管理。本主题介绍如何使用 Kotlin 协程解决以下问题&#xff0c;从而让您能够编写出更清晰、更简洁的应用代…

AI毕业论文降重GPTS,避免AI检测,高效完成论文

视频演示 AI毕业论文降重GPTS&#xff0c;避免AI检测&#xff0c;高效完成论文&#xff01; 开发目的 “毕业论文降重”GPTS应用&#xff0c;作用为&#xff1a;重新表述学术论文&#xff0c;降低相似性评分&#xff0c;避免AI检测。 使用地址 地址&#xff1a;毕业论文降重…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:ColumnSplit)

将子组件纵向布局&#xff0c;并在每个子组件之间插入一根横向的分割线。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 ColumnSplit通过分割线限制子组件的高度。初始…

跨境电商选品实战——Ownips公开数据信息安全采集+Python爬虫轻松搞定Lazada电商选品

文章目录 一、引言二、Lazada电商平台选品实战2.1、分析Lazada电商平台的商品列表接口2.2、定位商品列表计算逻辑2.3、封装高质量住宅IP2.4、运行爬虫 三、数据处理及选品分析四、Ownips——企业级全球静态住宅IP&#xff0c;高效采集公开数据 一、引言 互联网与外贸的结合&am…

考察c语言关键字

C语言——关键字 1.问题&#xff1a;简述goto语句的作用 答&#xff1a;无条件跳转 具体来说&#xff0c;其作用在于允许程序在执行时无条件地跳转到指定的标签位置&#xff0c;并从该标签位置继续执行。通过goto语句&#xff0c;可以实现程序流程的无条件转移&#xff0c;使得…

【python】爬取杭州市二手房销售数据做数据分析【附源码】

一、背景 在数据分析和市场调研中&#xff0c;获取房地产数据是至关重要的一环。本文介绍了如何利用 Python 中的 requests、lxml 库以及 pandas 库&#xff0c;结合 XPath 解析网页信息&#xff0c;实现对链家网二手房销售数据的爬取&#xff0c;并将数据导出为 Excel 文件的过…

Visual Studio项目模板的创建与使用

Visual Studio项目模板的创建、使用、删除 创建模板项目模板的使用模板的删除 创建模板 点击项目&#xff0c;点击导出模板 选择你要创建哪个项目的项目模板&#xff0c;点击下一步 输入你的模板名称并添加模板说明&#xff0c;方便记忆 项目模板的使用 点击创建新项目 输入刚刚…

什么是VR应急预案演练虚拟化|VR体验馆加盟|元宇宙文旅

VR 应急预案演练虚拟化指的是利用虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#xff09;技术进行应急预案演练的过程。在传统的应急预案演练中&#xff0c;人们通常需要在实际场地或模拟环境中进行演练&#xff0c;这可能存在一些限制&#xff0c;如成本高昂、场地受…

Cesium 获取 3dtileset的包围盒各顶点坐标

Cesium 获取 3dtileset的包围盒各顶点坐标 /*** 获取 3dtileset的包围盒各顶点坐标, z 方向取高度最低的位置* param {*} tileset* param {*} options* returns* ref https://blog.csdn.net/STANDBYF/article/details/135012273* ref https://community.cesium.com/t/accurate-…

PTA L2-014 列车调度

火车站的列车调度铁轨的结构如下图所示。 两端分别是一条入口&#xff08;Entrance&#xff09;轨道和一条出口&#xff08;Exit&#xff09;轨道&#xff0c;它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入&#xff0c;最后从出口离开。在图中有9趟列车&am…

uniapp 对video视频组件嵌套倍速按钮

这次接了需求是要求有倍速功能&#xff0c;去看了文档发现并没有倍速按钮的属性&#xff0c;想着手写一个吧 可最后发现原生层级太高&#xff0c;无论怎么样都迭不上去&#xff0c;就只能去找插件看看咯 找了好多插件发现都不可用&#xff0c;因为我这是app端&#xff0c;有些视…

【蓝桥杯单片机】十三届省赛“重难点”解析(附源码)

【蓝桥杯单片机】十三届省赛“重难点”解析 一、题目难点解析二、易出错点提示三、完整代码链接 笔记包括&#xff1a;①题目难点解析、②易出错点提示、③完整代码链接 注&#xff1a;本文提供的所有代码都是使用第十四届竞赛包完成 ⭐----------系列文章链接----------⭐ 【蓝…

2024年AI辅助研发:科技创新的引擎

CSND - 个人主页&#xff1a;17_Kevin-CSDN博客 收录专栏&#xff1a;《人工智能》 技术进展 进入2024年&#xff0c;人工智能&#xff08;AI&#xff09;在科技界和工业界的焦点地位更加巩固&#xff0c;其在辅助研发领域的技术进步尤为显著。深度学习技术的突飞猛进使得数据分…

<.Net>VisaulStudio2022下用VB.net实现socket与汇川PLC进行通讯案例(Eazy521)

前言 此前&#xff0c;我写过一个VB.net环境下与西门子PLC通讯案例的博文&#xff1a; VisaulStudio2022下用VB.net实现socket与西门子PLC进行通讯案例&#xff08;优化版&#xff09; 最近项目上会用到汇川PLC比较多&#xff0c;正好有个项目有上位机通讯需求&#xff0c;于是…

三.查找(顺序/二分)

目录 7-顺序查找(列表查找) 1-什么是列表查找 代码: 8-二分查找介绍(Binary Search) 查找元素3详细思路: 9-二分查找代码 10-线性查找与二分查找比较 运行时间-装饰器 比较代码: 11-排序介绍 7-顺序查找(列表查找) 1-什么是列表查找 查找&#xff1a;在一些数据元素…

MAC M芯片 Anaconda安装

Anaconda安装 1.M芯片下载AnaConda 1.M芯片下载AnaConda https://www.anaconda.com/download 安装完成 conda的版本是24.1.2

预备知识:深入理解接口测试!

实验简介 随着移动互联网甚至物联网的触角深入到人们生活的每个场景&#xff0c;每个角落&#xff0c;伴随而来的便是企业对其软件系统接口定义和研发&#xff0c;以便于进行数据传输和交换。由此导致目前企业急需大量专职接口测试工程师&#xff0c;因为接口测试天然具备自动…