Javascript常见算法(每日两个)

news2024/9/24 13:25:20

合并两个有序链表 

在JavaScript中,合并两个有序链表通常指的是将两个已经按照某种顺序(如升序或降序)排列的链表合并成一个新的有序链表。由于JavaScript本身不直接支持链表数据结构,我们通常会用对象或数组来模拟链表的行为。但为了更贴近链表的概念,我们可以使用对象来模拟链表节点,并通过指针(在JavaScript中通常是对象的引用)来连接这些节点。

链表节点的定义

首先,我们需要定义一个链表节点的结构。每个节点通常包含两部分:存储的数据(如数字、字符串等)和一个指向下一个节点的指针(在JavaScript中是一个对下一个节点对象的引用)。

链表节点的定义

首先,我们需要定义一个链表节点的结构。每个节点通常包含两部分:存储的数据(如数字、字符串等)和一个指向下一个节点的指针(在JavaScript中是一个对下一个节点对象的引用)。

function ListNode(val, next = null) {  
    this.val = val;  
    this.next = next;  
}

合并两个有序链表

合并两个有序链表的基本思路是使用两个指针分别遍历这两个链表,比较当前指针所指向的节点的值,将较小的节点添加到结果链表的末尾,并移动该指针到下一个节点。重复这个过程,直到两个链表都被遍历完。

function mergeTwoLists(l1, l2) {  
    // 创建一个哨兵节点,方便处理边界情况  
    let dummy = new ListNode(0);  
    let current = dummy;  
  
    // 当两个链表都不为空时,进行合并  
    while (l1 !== null && l2 !== null) {  
        if (l1.val < l2.val) {  
            current.next = l1;  
            l1 = l1.next;  
        } else {  
            current.next = l2;  
            l2 = l2.next;  
        }  
        current = current.next;  
    }  
  
    // 如果l1还有剩余节点,直接连接到结果链表的末尾  
    if (l1 !== null) {  
        current.next = l1;  
    }  
  
    // 如果l2还有剩余节点,直接连接到结果链表的末尾  
    if (l2 !== null) {  
        current.next = l2;  
    }  
  
    // 返回哨兵节点的下一个节点,即合并后的链表的头节点  
    return dummy.next;  
}

示例

假设我们有两个有序链表l1l2,分别表示如下:

  • l1: 1 -> 2 -> 4
  • l2: 1 -> 3 -> 4

合并后的链表应该是:

  • 1 -> 1 -> 2 -> 3 -> 4 -> 4

注意,合并后的链表可能包含重复的元素,并且保持有序。

注意事项

  • 合并过程中,我们使用了一个哨兵节点(dummy node)来简化边界条件的处理。哨兵节点的next属性将指向合并后链表的头节点。
  • 在遍历过程中,我们只需要关注当前节点的值,并根据比较结果将较小的节点添加到结果链表中。
  • 当一个链表遍历完成后,我们直接将另一个链表的剩余部分连接到结果链表的末尾,因为这部分已经是有序的,无需进一步处理。

版权:印客学院,仅学习使用 

 

括号生成

JS算法数字n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的 括号组合。

为了生成所有可能的并且有效的括号组合,我们可以采用回溯法(backtracking)来解决这个问题。回溯法是一种通过探索所有可能的候选解来找出所有解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化来撤销上一步,即“回溯”,并尝试另一种可能的候选解。

具体到这个问题,我们需要保持左括号的数量总是大于等于右括号的数量,以确保生成的括号序列是有效的。

下面是一个使用JavaScript编写的示例代码:

const generateParenthesis = function(n) {  
    const result = [];  
  
    // 辅助函数,用于生成括号  
    // left表示剩余的左括号数量,right表示剩余的右括号数量  
    const backtrack = (str, left, right) => {  
        // 如果左括号和右括号都已经用完,则将当前组合添加到结果数组中  
        if (left === 0 && right === 0) {  
            result.push(str);  
            return;  
        }  
  
        // 如果左括号还有剩余,则可以添加一个左括号  
        if (left > 0) {  
            backtrack(str + '(', left - 1, right);  
        }  
  
        // 只有在剩余的右括号数量大于左括号数量时,才能添加右括号  
        // 这是为了保证左括号总是先于右括号被使用  
        if (right > left) {  
            backtrack(str + ')', left, right - 1);  
        }  
    };  
  
    // 初始调用回溯函数  
    backtrack('', n, n);  
  
    return result;  
};  
  
// 示例  
console.log(generateParenthesis(3));  
// 输出:  
// [  
//   "((()))",  
//   "(()())",  
//   "(())()",  
//   "()(())",  
//   "()()()"  
// ]

 在这个示例中,generateParenthesis函数是主函数,它接受一个参数n,表示要生成的括号对数。函数内部定义了一个result数组用于存储所有有效的括号组合。然后,它调用了一个辅助函数backtrack,该函数采用回溯法来生成所有可能的括号组合。backtrack函数接收当前已生成的括号字符串str、剩余的左括号数量left和剩余的右括号数量right作为参数。通过递归调用backtrack函数,并在每一步尝试添加左括号或右括号(如果满足条件),我们可以遍历所有可能的括号组合,并将有效的组合添加到result数组中。最后,generateParenthesis函数返回result数组,即所有有效的括号组合。

 

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

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

相关文章

【大模型从入门到精通15】openAI API 构建和评估大型语言模型(LLM)应用3

这里写目录标题 设置评估前的准备工作先决条件获取LLM响应 根据评估标准评估响应构建详细的评估标准评估过程示例评估 设置评估前的准备工作 先决条件 在开始评估过程之前&#xff0c;请确保必要的工具和配置已经到位&#xff1a; import os import openai from dotenv impo…

数据结构课程设计:航班订票系统的设计与实现

目录 1 系统功能及要求 2 系统功能框架 3 详细设计 3.1 录入航班信息模块 3.2 客户订票模块 3.3 客户退票模块 3.4 航班查询模块 3.5 订单查询模块 3.6 航班修改模块 参考文献 1 系统功能及要求 (1)录入信息。可以录入航班信息情况,数据存储在一个数据文件中;可以…

靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解+卷积长短期+注意力多元时间序列预测

靓图&#xff01;多点创新&#xff01;CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解卷积长短期注意力多元时间序列预测 目录 靓图&#xff01;多点创新&#xff01;CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解卷积长短期注意力多元时间序列预测效果一览基本介绍程序设计…

了解babel的作用、原理、基本使用,为什么有babel,以及在webpack中的babel-loader

一、为什么有babel&#xff1f; babel是一个工具链&#xff0c;如今大多数的浏览器都支持es6的语法和特性&#xff0c;但难免有些旧版本的浏览器是不支持的&#xff0c;为了兼容这些旧版本的浏览器&#xff0c;有了babel这一个 JavaScript 编译器。它能为我们做一些事情&#…

Linux中针对文件权限的解析

1.文件权限详细解析&#xff1a; -rw-r--r--. 1 root root 114 4月 10 16:32 100.txt 1)-rw-r--r--. 总共11位 第一个“-”和最后一个“.”不用去管&#xff0c;剩下 rw- r-- r-- 属主 属组 其他人 u g o 第一个是“-”表示普通文件 第一个是“d”表示文件目录 …

从BEVDET来学习如何生成trt以及如何去写这些C++内容

0. 简介 对于深度学习而言&#xff0c;通过模型加速来嵌入进C是非常有意义的&#xff0c;因为本身训练出来的pt文件其实效率比较低下&#xff0c;所以这里我们将以BEVDET作为例子&#xff0c;来向读者展示如何去生成trt&#xff0c;并完善engine加速。这里最近受到优刻得的使用…

autoX.js

一. 概述 AutoX.js 使用 JavaScript 作为脚本语言&#xff0c;目前使用 Rhino 1.7.13 作为脚本引擎&#xff0c;支持 ES5 与部分 ES6 特性。 下载地址&#xff1a; https://github.com/kkevsekk1/AutoX/releases 官方文档&#xff1a; AutoX.js 二. 用法 1. 首先在官网下…

如何快速从文本中找到需要的信息,字典和正则灵活运用

import re #打开文本文件 f open("stock_data.txt",encoding"utf-8") #单独读取第一行数据处理进行分割&#xff0c;末尾换行符去掉 headers f.readline().strip().split(,) print(headers) #定义一个字典&#xff0c;以股标代码做为KEY,每个行做为值 st…

嵌入式学习day14(shell脚本)

一丶概念 shell脚本的本质&#xff1a;shell命令的有序集合 shell既是应用程序又是脚本语言&#xff0c;并且是解释型语言&#xff0c;不需要编译&#xff0c;解释一条执行一条。 shell脚本编程&#xff1a;将shell命令结合一些按照一定逻辑集合到一起&#xff0c;写一个.sh文件…

springboot项目配置https证书

前言 springboot项目直接http访问不安全&#xff0c;如何开启https&#xff1f; 如何配置ssl 创建证书 注意:如果你有CA办法的数字证书&#xff0c;可以使用直接使用CA颁发的证书。非可信CA或者私人颁发的证书在浏览器地址栏会显示红色&#xff0c;不安全不受信任。 如果你没…

Mac/iPhone邮件APP绑定武大邮箱

Mac/iPhone邮件APP绑定武大邮箱 一、准备工作二、新增一个互联网账户三、设置收件箱和发件箱服务器 一、准备工作 武大邮箱账户&#xff0c;确保你知道自己的邮箱登陆密码。 下面的步骤是在Mac上操作&#xff0c;iPhone上的设置也是一样的&#xff0c;主要是收件箱和发件箱服…

DC-4 打靶渗透

一、信息收集 1、查看靶机MAC地址&#xff1a; 2、查看靶机的ip地址&#xff1a; nmap 192.168.13.0/24 3、查看靶机开放的端口&#xff1a; nmap -p- -sC -sT -sV -A 192.168.13.161 4、访问靶机的80端口&#xff1a; 5、扫描目录&#xff1a; dirsearch -u "http://192…

Redis远程字典服务器(3)——常用数据结构和单线程模型

目录 一&#xff0c;常用数据结构 1.0 前言 1.1 string 1.2 hash 1.3 list 1.4 set 1.5 zset 1.6 演示 二&#xff0c;关于单线程模型 2.1 关于Redis的单线程 2.2 Redis为什么快 一&#xff0c;常用数据结构 1.0 前言 Redis是采用键值对的方式来存储数据的&#…

pixel 3a 刷机和root 流程

1、下载镜像文件 官方下载出厂镜像刷入 或者直接下载手机本身自带的镜像。 下载地址&#xff1a;https://developers.google.com/android/images 找到对应手机的版本&#xff0c;可以通过指令 adb shell getprop 找到 [ro.bootimage.build.fingerprint]: [google/sargo/sargo:1…

代码随想录算法训练营第九天|151.翻转字符串里的单词 卡码网:55.右旋转字符串

LeetCode 151 翻转字符串里的单词 题目&#xff1a; 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意…

超声波眼镜清洗机哪个品牌比较好用?四大高赞耐用单品全面测评

随着大家对健康卫生的关注不断提升&#xff0c;超声波清洗机逐渐受到佩戴眼镜人士的青睐。超声波清洗机是一种既方便又高效的智能清洁工具。它利用超声波技术&#xff0c;通过在眼镜表面产生高频振动&#xff0c;将污垢和油脂彻底分离&#xff0c;从而实现卓越的清洁效果。下面…

基于PSO-LSTM的多变量多特征数据分类预测

一、数据集 数据特征&#xff1a;12个多分类&#xff1a;4分类 二、PSO-LSTM网络 PSO-LSTM 网络是一种结合粒子群优化算法&#xff08;Particle Swarm Optimization, PSO&#xff09;和长短期记忆网络&#xff08;Long Short-Term Memory, LSTM&#xff09;的混合模型。它将 …

好领导都会用三招管好下属!

管不住人&#xff0c;你就当不好官&#xff0c;高明领导管人就靠这3大秘诀&#xff01; 秘诀一&#xff1a;敢于亮剑 身为领导&#xff0c;&#xff0c;有时候需要有勇气面对挑战和问题&#xff0c;勇于做出决策&#xff0c;拿出魄力&#xff0c;勇于亮剑&#xff0c;向一切宣…

【HarmonyOS NEXT星河版开发学习】小型测试案例11-购物车数字框

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面&#xff08;暂未发布&#xff09; 前言 经过一周的学习&#xff0c;我发现还是进行拆分讲解效果会比较好&#xff0c;因为鸿蒙和前端十分的相识。主要就是表达的方式不同罢了…

2024年高教社杯全国大学生数学建模竞赛报名第一次通知!建议收藏!预测类模型及应用场景汇总

对于数学建模而言,算法模型选的对,文章写的顺~其中预测类模型是数模中常用的模型之一,通过预测模型,我们可以对未来的趋势和事件进行合理推测。今天,数模0error给大家汇总一下预测类模型及其应用场景,供大家参考,小伙伴们码住! 2024年高教社杯全大学生数学建模竞赛通知…