【JavaScript】LeetCode:36-40

news/2024/9/18 11:05:31/ 标签: javascript, leetcode, 开发语言

文章目录

  • 36 两数相加
  • 37 删除链表的倒数第n个节点
  • 38 两两交换链表中的节点
  • 39 k个一组翻转链表
  • 40 随机链表的复制

36 两数相加

在这里插入图片描述

  • 创建一个新的链表(哨兵节点指向),这个链表用来表示两个数相加后的和。
  • 从个位开始相加,每次都向新链表尾部添加一个节点,即保存一个数位。
  • 遍历l1和l2,每次都计算sum = l1.val + l2.val + carry(进位),将sum % 10作为当前节点要保存的数位,将sum / 10作为新的进位值。
javascript">/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} l1* @param {ListNode} l2* @return {ListNode}*/
var addTwoNumbers = function(l1, l2) {var carry = 0;var dummy = new ListNode();cur = dummy;while(l1 || l2 || carry){sum = (l1? l1.val: 0) + (l2? l2.val: 0) + carry;var node = new ListNode(sum % 10);cur.next = node;carry = Math.floor(sum / 10);cur = cur.next;if(l1){l1 = l1.next;}if(l2){l2 = l2.next;}}return dummy.next;
};

37 删除链表的倒数第n个节点

在这里插入图片描述

  • 快慢指针
  • 添加哨兵节点,要删除倒数第n个节点,需要先找到倒数第n + 1个节点(即第n个节点的前一个结点)。
  • 快指针先移动n + 1步,然后快、慢指针一起向前移动,当快指针指向null时,慢指针就指向倒数第n + 1个节点。
  • 快指针比慢指针快n + 1步,所以当快指针指向null时,慢指针距离null还有n + 1个节点,即慢指针指向倒数第n + 1个节点。
  • 将倒数第n + 1个节点指向倒数第n - 1个节点。
javascript">/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} head* @param {number} n* @return {ListNode}*/
var removeNthFromEnd = function(head, n) {var dummy = new ListNode();dummy.next = head;var fast = dummy, slow = dummy;while(n + 1 && fast != null){fast = fast.next;n--;}while(fast != null){fast = fast.next;slow = slow.next;}slow.next = slow.next.next;return dummy.next;
};

38 两两交换链表中的节点

在这里插入图片描述

  • 添加哨兵节点。
  • 操作指针cur指向要反转的两个节点的前一个结点,例如要反转节点3、4,cur应该指向节点2。
  • 当结点个数为偶数时,cur.next = null结束操作。
  • 当结点个数为奇数时,cur.next.next = null结束操作。
  • 例:哨兵节点(cur) => 节点1 => 节点2 => 节点3 => 节点4 => … => null,这里要反转节点1、2。
  • 临时变量:temp1存储节点2,temp2存储节点3。
  • ① cur指向节点2。
  • ② 节点2指向节点1(temp1)。
  • ③ 节点1指向节点3(temp2)。
  • 改变顺序后的链表为:哨兵节点(cur) => 节点2 => 节点1 => 节点3 => 节点4 => … => null。
  • 操作节点cur指向节点1,继续进行节点3、4的交换。
javascript">/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} head* @return {ListNode}*/
var swapPairs = function(head) {var dummy = new ListNode();dummy.next = head;var cur = dummy;while(cur.next != null && cur.next.next != null){var temp1 = cur.next;var temp2 = cur.next.next.next;cur.next = cur.next.next; // dummy => 2cur.next.next = temp1; // 2 => 1cur.next.next.next = temp2; // 1 => 3cur = cur.next.next; // cur => 1}return dummy.next;
};

39 k个一组翻转链表

在这里插入图片描述

  • 先求链表长度,每次判断剩余节点个数 >= k才能进行反转。
  • 将连续k个节点反转:反转结束后,从原来的链表上看,pre指向这k个节点的最后一个节点,cur指向这k个节点的下一个节点。反转链表的解析及代码详见:31 反转链表。
  • 添加哨兵节点,p指向哨兵节点,p作为这k个反转节点的前一个结点,该节点在反转后.next指向pre(反转后的第一个节点)。
  • 临时变量pn作为p结点的下一个结点,同时pn也是这k个节点在反转前的第一个节点、反转后的最后一个结点,pn(下一段的前一个节点)在反转结束后.next指向cur(下一段的第一个节点)。
  • 更新p,指向pn。
javascript">/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} head* @param {number} k* @return {ListNode}*/
var reverseKGroup = function(head, k) {var count = 0;var cur = head;while(cur){count++;cur = cur.next;}var dummy = new ListNode();dummy.next = head;var p = dummy;var pre = null;cur = p.next;while(count >= k){count -= k;for(var i = 1; i <= k; i++){var temp = cur.next;cur.next = pre;pre = cur;cur = temp;}var pn = p.next;p.next = pre;pn.next = cur;p = pn;}return dummy.next;
};

40 随机链表的复制

在这里插入图片描述

  • 哈希表
  • 构造原链表节点和新链表节点的映射关系,然后根据原链表节点的next和random指向,更新新链表。
  • 第1次遍历链表:新建节点,在哈希表中添加键值对(原节点,新节点)。
  • 第2次遍历链表:添加新节点的next和random指向。
  • 注意:若节点的.next或.random为null,map.get(null)返回undefined,undefined的布尔值为false。
javascript">/*** // Definition for a _Node.* function _Node(val, next, random) {*    this.val = val;*    this.next = next;*    this.random = random;* };*//*** @param {_Node} head* @return {_Node}*/
var copyRandomList = function(head) {if(head == null){return head;}var map = new Map();var cur = head;while(cur){map.set(cur, new _Node(cur.val));cur = cur.next;}cur = head;while(cur){map.get(cur).next = map.get(cur.next) || null;map.get(cur).random = map.get(cur.random) || null;cur = cur.next;}return map.get(head);
};

http://www.ppmy.cn/news/1526205.html

相关文章

.NET/C#⾯试题汇总系列:多线程

1.根据线程安全的相关知识&#xff0c;分析以下代码&#xff0c;当调⽤test⽅法时i>10时是否会引起死锁?并简 要说明理由。 public void test(int i) {lock(this){if (i>10){i--;test(i);}} } 不会发⽣死锁&#xff0c;&#xff08;但有⼀点int是按值传递的&#xff0…

秃姐学AI系列之:实战Kaggle比赛:狗的品种识别(ImageNet Dogs)

目录 前置准备 整理数据集 图片增广 读取数据集 微调预训练模型 训练函数 训练和验证模型 Kaggle提交结果 前置准备 常规导包 import os import torch import torchvision from torch import nn from d2l import torch as d2l 使用小规模数据样本 d2l.DATA_HUB[dog…

GIS在线监测SF6密度微水传感器免焊接格兰头航插插头

概述 GIS&#xff08;气体绝缘金属封闭开关设备&#xff09;中的SF6&#xff08;六氟化硫&#xff09;气体密度微水传感器航插技术是指在GIS设备中安装SF6气体密度和微水传感器&#xff0c;以实现对SF6气体状态的在线监测。这些传感器能够实时监测SF6气体的密度、微水含量以及其…

鸿蒙交互事件开发04——手势事件

1 概 述 手势事件是移动应用开发中最常见的事件之一&#xff0c;鸿蒙提供了一些方法来绑定手势事件。通过给各个组件绑定不同的手势事件&#xff0c;并设计事件的响应方式&#xff0c;当手势识别成功时&#xff0c;ArkUI框架将通过事件回调通知组件手势识别的结果。 …

AI创意引擎:优化Prompt提示词的高效提问技巧

AI内容创作的精髓&#xff1a;提示词&#xff08;Prompt&#xff09; 在AI领域中&#xff0c;提示词&#xff08;Prompt&#xff09;是与模型沟通的关键工具。提示词不仅决定了AI生成内容的方向和质量&#xff0c;还在优化模型输出、提升用户体验中扮演着至关重要的角色。因此…

【机器学习】迁移学习的实践

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 迁移学习的实践迁移学习的常见框架1. 特征提取器微调(Fine-tuning the Feature …

获取某宝拍立淘API接口:深度学习图像实现匹配和检索

1. 总体概述 拍立淘的核心技术在于图像识别与检索&#xff0c;融合了深度学习、计算机视觉、大数据处理等多个领域的先进技术1。通过构建大规模的商品图像数据库&#xff0c;并利用深度学习算法提取图像特征&#xff0c;实现高效的图像匹配与检索1。 2. 具体技术环节 &#…

Unity 第一人称游戏的武器被其他物体覆盖解决方案

在第一人称游戏的时候&#xff0c;会出现渲染过程中&#xff0c;主角的手持武器可能会被其他物体挡住。 解决方法 在主摄像机下再创建一个摄像机&#xff0c;负责渲染不同图层 Main Camera的参数&#xff1a;我们这个摄像机不渲染equipable层&#xff08;自定义武器为equipab…

从ANN到SNN的转换:实现、原理及两种归一化方法【MINIST、实战】

从ANN到SNN的转换&#xff1a;实现、原理及两种归一化方法 引言 随着神经形态计算的迅猛发展&#xff0c;脉冲神经网络&#xff08;Spiking Neural Networks, SNNs&#xff09;作为一种仿生神经计算模型&#xff0c;逐渐展现出其在低功耗和事件驱动计算领域的巨大潜力。不同于…

【docker】docker 关键技术 —— 镜像制作

docker 镜像制作 镜像制作及原因Docker 镜像制作方式快照方式制作镜像制作命令 Dockerfile 制作镜像Dockerfile 是什么Dockerfile 格式为什么需要 Dockerfilegitee 详细使用 Dockerfile 教程 镜像制作及原因 镜像制作是因为某种需求&#xff0c;官方的镜像无法满足需求&#x…

【网盘外快】百度网盘SVIP充值使用说明,如何通过软件自动充值获取新用户优惠?这篇文章给你正确答案。

资源地址&#xff1a; 此软件需要 网盘ck 才可以使用。 雷电模拟器下载地址&#xff1a;https://www.ldmnq.com/ 软件下载地址&#xff1a;https://wwi.lanzoup.com/b01qdiavzg 密码:666 模拟器使用说明&#xff1a; 1、调整模拟器分辨率调整为&#xff1a;540 X 960。 2、…

【数据结构与算法 | 每日一题 | 力扣篇】力扣1184

1. 力扣1184&#xff1a;公交站间的距离 1.1 题目&#xff1a; 环形公交路线上有 n 个站&#xff0c;按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离&#xff0c;distance[i] 表示编号为 i 的车站和编号为 (i 1) % n 的车站之间的距离。 环线上的公交车…

后端入门 (JQuery基础) 01

引入jQuery资源&#xff08;https://cdn.staticfile.net/jquery/1.10.2/jquery.min.js&#xff09; <script src"jquery.js"></script> <!-- 引入jQuery资源 --> 绑定事件的方式&#xff1a; 1. 直接使用事件函数 $("p").click(func…

【智路】智路OS Airos Edge 2.0 Quick Start

Airos Edge 2.0 Quick Start 1 智路OS2.0 1.1 简介 智路OS路侧操作系统airos-edge自下而上分别由内核层&#xff0c;硬件抽象层、框架层、服务层和应用层构成&#xff1b;提供了一系列抽象和框架&#xff0c;支持设备接入、服务、应用等组件开发&#xff0c;兼容X86和ARM操作…

TCP和MQTT通信协议

协议分层 网络分层 协议应用层 Co AP MQTT HTTP传输层 UDP TCP网络层 IP链路层 Enternet 网络分层中最…

在Ubuntu上部署 Misskey 服务器

今天我在阿贝云的免费服务器上进行了一次有趣的部署测试。阿贝云的服务真是让人惊喜&#xff0c;尤其是它的免费云服务器&#xff0c;提供的1核CPU、1G内存、10G硬盘和5M带宽的配置&#xff0c;绝对是个不错的免费服务器&#xff01;这样的环境适合开发和学习&#xff0c;给我带…

十四,在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明

十四&#xff0c;在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明 文章目录 十四&#xff0c;在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明1. 基本介绍2. 准备工作&#xff1a;3. 内置 Tomcat 的配置3.1 第…

uniapp升级Vue3:避坑指南与步骤详解

为什么要升级到 Vue3 Vue3 是 Vue.js 的最新版本&#xff0c;相比 Vue2&#xff0c;它带来了许多改进和新特性&#xff0c;比如更小的包体积、更好的性能、更强大的组合式 API 等。通过升级到 Vue3&#xff0c;我们可以享受到这些新特性带来的好处&#xff0c;提升项目的开发效…

在服务器上开Juypter Lab教程(远程访问)

在服务器上开Juypter Lab教程&#xff08;远程访问&#xff09; 文章目录 在服务器上开Juypter Lab教程&#xff08;远程访问&#xff09;一、安装anaconda1、安装anaconda2、提权限3、运行4、同意协议5、安装6、是否要自动初始化 conda7、结束8、检查 二、Anaconda安装Pytorch…

精品PPT | 离散制造行业智能工厂总体解决方案

一、建设背景 离散制造业&#xff0c;包括机械制造业、汽车制造业和家电制造业等&#xff0c;其生产过程涉及多个不连续的工序&#xff0c;产品通常由多个零件装配而成。这类行业面临的挑战包括品种多、批量小、订单变化快、临时插单频繁以及外协件管理困难等问题&#xff0c;…