Leetcode 3.12

leetcode hot 100

    • 链表
      • 1.两两交换链表中的节点
      • 2.随机链表的复制
      • 3.排序链表

链表

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

两两交换链表中的节点

在这里插入图片描述

  • 1.必须要设置一个dummy (temp) 结点
  • 2.保存第二个节点
  • 3.先让第一个节点指向第三个节点
  • 4.再让第二个节点指向第一个节点
  • 5.最后让dummy指向第二个节点
  • 6.更新dummy节点,和当前节点
  • 7.尝试了以下,以上交换的步骤3-5可以任意修改顺序
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode* p = head;ListNode* dummy = new ListNode(0);dummy->next = head;ListNode* ans = dummy;int i = 0;while (p != nullptr && p->next != nullptr) {//保存第二个节点auto tmp = p->next;//第一个节点指向第三个节点p->next = tmp->next;//第二个节点指向第一个节点tmp->next = p;//dummy指向第二个节点dummy->next = tmp;//更新指针dummy = p;p = p->next;}return ans->next;}
};

2.随机链表的复制

随机链表的复制

  • 两个循环

  • 先用一个循环,用unordered_map把两个链表捆绑

  • 再用一个循环构建新链表的引用指向

    • 建立新的next和random指向
      • mp[q]->next = mp[q->next]
      • mp[q]->random = mp[q->random]
    • 遍历至原链表下一节点
  • mp[head] 就是新链表的头节点
    在这里插入图片描述

/*
// Definition for a Node.
class Node {
public:int val;Node* next;Node* random;Node(int _val) {val = _val;next = NULL;random = NULL;}
};
*/class Solution {
public:Node* copyRandomList(Node* head) {unordered_map<Node*, Node*> mp;Node* p = head;//绑定链表while (p != nullptr) {mp[p] = new Node(p->val);p = p->next;}Node* q = head;//建立新的引用指向while (q != nullptr) {mp[q]->next = mp[q->next];mp[q]->random = mp[q->random];q = q->next;}return mp[head];}
};

3.排序链表

排序链表
放入vector,排序后覆盖原数组……开个玩笑,来看官解吧:

  • 找到链表中点。

    • 快指针 = head->next, 慢指针 = slow->next
    • 快指针走两步,慢指针走一步,快指针到末尾时慢指针为链表中点
    • 找到中点 slow 后,执行 slow.next = nullptr 将链表切断
    • 递归分割时,输入当前链表左端点 head 和中心节点 slow 的下一个节点 tmp (因为链表是从 slow 切断的)。
    • cut 递归终止条件: 当 head.next == nullptr 时,说明只有一个节点了,直接返回此节点。
  • 将两个子链表排序合并,这里可以用到合并两个有序链表

    • 双指针法合并,建立辅助 ListNode* dummy 作为头部。

    • 设置两指针 left, right 分别指向两链表头部,比较两指针处节点值大小,由小到大加入合并链表头部,指针交替前进,直至添加完两个链表。

  • 返回辅助ListNode dummy作为头部的下个节点 h.next。

时间复杂度:O(nlog⁡n),其中 n 是链表的长度。

空间复杂度:O(log⁡n),其中 n 是链表的长度。空间复杂度主要取决于递归调用的栈空间。

在这里插入图片描述

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* sortList(ListNode* head) {if (head == nullptr || head->next == nullptr) return head;ListNode* fast = head->next, *slow = head;while (fast != nullptr && fast->next != nullptr) {fast = fast->next->next;slow = slow->next;}ListNode* tmp = slow->next;slow->next = nullptr;ListNode* left = sortList(head);ListNode* right = sortList(tmp);ListNode* dummy = new ListNode(0);ListNode* ans = dummy;while (left != nullptr && right != nullptr) {if (left->val > right->val) {ans->next = right;right = right->next;} else {ans->next = left;left = left->next;}ans = ans->next;}ans->next = left == nullptr ? right : left;return dummy->next;}
};

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

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

相关文章

蓝鲸作业平台升级openssh执行方案分享

本文来自腾讯蓝鲸智云社区用户&#xff1a;AK47 蓝鲸的运维系统在我们单位使用已经快四个年头了&#xff0c;从刚开始的5到现在最新的7.1都有部署、测试、验证和使用。在实际的使用过程中&#xff0c;给我们运维提供了非常大的帮助。其中有一个场景分享给大家。这个场景是关于o…

Linux——磁盘文件

磁盘文件 通过前一篇文章Linux——系统文件I/O&#xff0c;我们知道了如何对加载在内存中的文件进行读写等操作&#xff0c;并了解了其内在的原理。同时我们也应该清楚&#xff0c;并不是所有的文件都会被加载入内存&#xff0c;而没有被加载入内存的文件&#xff0c;就被存放…

酷开科技智慧AI助力酷开系统千屏千面

每台智能电视都有一个专属的操作系统&#xff0c;而酷开系统作为一款基于人工智能技术的智能电视操作系统&#xff0c;深受大众喜爱&#xff0c;其最大的特点就是“千屏千面”。这意味着每一位消费者在使用酷开系统时&#xff0c;通过酷开科技的智慧AI&#xff0c;都能根据自己…

Prometheus监控Mysql数据库在Grafana展示

未安装prometheus和Grafana可以参考这个博客操作 Docker安装Prometheus监控-CSDN博客 Windows版本数据库 一、在数据库服务器安装mysqld-exporter 下载mysqld-exporter文件 Releases prometheus/mysqld_exporter GitHub 二、配置mysqld-exporter文件 1、解压进入mysqld…

docker+elasticsearch

一&#xff0c;环境准备&#xff1a;安装docker&#xff08;往期文章&#xff09; 二&#xff0c;elasticsearch简介&#xff1a; 用于储存数据 三&#xff0c;部署&#xff1a; 1&#xff09;&#xff0c;拉取镜像 使用本作者提供的java17镜像 2&#xff09;&#xff0c;…

ARM64汇编05 - MOV系列指令

MOV(wide immediate) MOV 可以将一个立即数移动到寄存器中。 .text:0000000000000834 80 46 82 D2 MOV X0, #0x1234 ; Keypatch modified this from:MOV X0, #0x1234 对应的汇编代码为&#xff1a;80 46 82 D2 看手册可知&#xf…

Unity制作马赛克效果

大家好&#xff0c;我是阿赵。   之前在玩怒之铁拳4里面&#xff0c;看到了马赛克场景转换的效果&#xff0c;觉得很有趣&#xff0c;于是也来做一下。 一、2D版本的马赛克转场效果 先看看视频效果&#xff1a; 马赛克转场 这里我是直接写shader实现的&#xff0c;我这里是把…

spring boot使用mybatisplus访问mysql的配置流程

网上教程大多教人新建一个带对应组件的项目&#xff0c;本文记录如何在一个已有springboot2.x项目中&#xff0c;配置使用mybatisplus来访问mysql。包括使用wrapper和自己写mapper.xml的自定义函数两种和数据库交互的方式。 关于项目的创建&#xff0c;参考创建springboot 2.x…

Shell正则表达式

目录 正则表达式的分类 基本组成部分 POSIX字符类 元字符 正则表达式的分类 基本的正则表达式&#xff08;Basic Regular Expression 又叫Basic RegEx 简称BREs&#xff09;扩展的正则表达式&#xff08;Extended Regular Expression 又叫Extended RegEx 简称EREs&#xf…

pytest生成allure的报告

首先要下载安装配置allure allure serve ./outputs/allure_report 可以生成html的文件自动在默认浏览器中打开

unity3d Animal Controller的动物组件使用明天继续

控制器介绍 动物脚本负责控制动物的所有运动逻辑.它管理所有的动画师和刚体参数,以及所有的状态和模式,动物可以做。 动物控制器 是一个动画框架控制器,根动或到位,为任何生物或人形。它利用刚体与物理世界的互动和动画师的玩动画。 States States 是不互相重叠的动画。例如…

牛角表情生成器微信小程序版

1.纯前端输出&#xff0c;无需后台&#xff0c;无需域名&#xff0c;速度杠杠快&#xff01; 2.完美支持微信端和抖音端&#xff1b; 3.双端均支持配置开启流量主广告&#xff0c;包括&#xff1a;激励视频广告、插屏广告、banner广告、原生广告、封面广告等&#xff1b; 4.…

Codeforces Round 933 (Div. 3) A~D

比赛链接 : codeforces.com/contest/1941 A . Rudolf and the Ticket 直接暴力即可 ; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \n #define lowbit(x) (x&(-x)) #define sz(a) (int)a.size() #define p…

最好用的流程编辑器bpmn-js系列之基本使用

BPMN&#xff08;Business Process Modeling Notation&#xff09;是由业务流程管理倡议组织BPMI&#xff08;The Business Process Management Initiative&#xff09;开发的一套标准的业务流程建模符号规范。其目的是为用户提供一套容易理解的标准符号&#xff0c;这些符号作…

数学建模理论与实践国防科大版

目录 1.数学建模概论 2.生活中的数学建模 2.1.行走步长问题 2.2.雨中行走问题 2.3.抽奖策略 2.4.《非诚勿扰》女生的“最优选择” 3.集体决策模型 3.1.简单多数规则 3.2.Borda数规则 3.3.群体决策模型公理和阿罗定理 1.数学建模概论 1.数学模型的概念 2.数学建模的概…

前端之用html做一个用户登陆界面

用户登陆界面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>用户注册页面</title></head> <body><form action"https://www.baidu.com" method"post">…

数据库系统概念(第二周 第一堂)

前言 本文的所有知识点、图片均来自《数据库系统概念》&#xff08;黑宝书&#xff09;、山东大学李晖老师PPT。不可用于商业用途转发。 回顾 上周最后一个知识点说到数据库三级模式结构&#xff0c;在这个结构里面我们设立了模式/内模式映像、内模式/外模式映像&#xff0c;主…

服务器被大流量攻击怎么办?如何防御攻击?

随着网络的发展&#xff0c;我们所遇到的安全挑战也越来越多。尤其是近年来&#xff0c;网络攻击频发&#xff0c;许多互联网企业深受其扰。为了不影响自身业务的稳定运行&#xff0c;许多企业都在想方设法的寻求解决方案&#xff0c;防止服务器被攻击而影响业务发展。下面我们…

云起云落:揭秘云计算基础内功心法

文章目录 云计算基本概念云计算发展历程云计算计算模式云计算商业模式云计算部署模式私有云部署公有云部署混合云部署 云计算虚拟化技术虚拟机模式虚拟化容器模式虚拟化容器VS虚拟机 常见虚拟化工具和技术虚拟化工具“轻量级”虚拟化工具 云计算供应商云计算三要点&#xff08;…

【Node.js相关问题】npm install报错后重装node版本及npm环境变量配置及npm run dev启动报错原因分析解决办法

一、问题描述 昨天在准备打开b站up主三更草堂的博客项目08-02.基础版本前端联调_哔哩哔哩_bilibili中的前端工程时&#xff0c;使用以下两个命令分别都出现了报错。 命令1&#xff1a; # install dependenciesnpm install 命令2&#xff1a; # serve with hot reload at loca…