当前位置: 首页 > news >正文

Javascript常见算法(每日两个)

合并两个有序链表 

在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数组,即所有有效的括号组合。

 

相关文章:

Javascript常见算法(每日两个)

合并两个有序链表 在JavaScript中&#xff0c;合并两个有序链表通常指的是将两个已经按照某种顺序&#xff08;如升序或降序&#xff09;排列的链表合并成一个新的有序链表。由于JavaScript本身不直接支持链表数据结构&#xff0c;我们通常会用对象或数组来模拟链表的行为。但…...

Spring -- 事务

Spring中事务的操作分为两类:(1)编程式事务 – 手动写代码操作事务(2)声明式事务 – 利用注解开启事务和提交事务 1. 编程式事务 准备Controller RestController RequestMapping("/user") public class UserInfoController {Autowiredprivate UserInfoService use…...

生命密码的破译者:AI如何学会读懂DNA语言?

引言 如果能像解读一本神秘的书籍那样&#xff0c;理解DNA的“语言”&#xff0c;将是多么令人兴奋的科学突破&#xff01;如今&#xff0c;这正在逐步变为现实。科学家们训练出的AI模型GROVER正如一个勤奋的学生&#xff0c;学习着DNA的每一个“单词”和“语法”&#xff0c;…...

大数据信用报告查询哪家平台的比较好?

相信在搜索大数据信用的你&#xff0c;已经因为大数据信用不好受到了挫折&#xff0c;想详细了解一下自己的大数据信用&#xff0c;但是找遍了网络上的平台之后才发现&#xff0c;很多平台都只提供查询服务&#xff0c;想要找一个专业的平台查询和讲解很困难。下面本文就为大家…...

Java高级Day24-集合最后补充

75.HashTable 基本介绍&#xff1a; 存放元素的健值对 即K-V hashtable的键和值都不能为null&#xff0c;否则会抛出NullPointerException hashtable使用方法基本上和HashMap一样 hashtable是线程安全的&#xff0c;hashmap是线程不安全 扩容机制&#xff1a; 底层有数组…...

C++入门:C语言到C++的过渡

前言&#xff1a;C——为弥补C缺陷而生的语言 C起源于 1979 年&#xff0c;当时 Bjarne Stroustrup 在贝尔实验室工作&#xff0c;面对复杂软件开发任务&#xff0c;他感到 C 语言在表达能力、可维护性和可扩展性方面存在不足。 1983 年&#xff0c;Bjarne Stroustrup 在 C 语言…...

了解MVCC

概念 MVCC&#xff0c;全称Multi-Version Concurrency Control&#xff0c;即多版本并发控制&#xff0c;是一种并发控制的方法&#xff0c;维护一个数据的多个版本&#xff0c;使得读写操作没有冲突&#xff0c;快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现…...

WPF自定义控件的应用(DynamicResource的使用方法)

1 DynamicResource的使用方法 可以在字典文件 的抬头区写入数&#xff1a; <SolidColorBrush x:Key"PrimaryBackgroundColor" Color"#FFABAdB3"/><SolidColorBrush x:Key"TextBox.MouseOver.Border" Color"#FF7EB4EA"/>&l…...

Postgresql数据库密码忘记的解决

当您忘记PostgreSQL数据库的密码时,可以通过以下步骤来重置密码。这些步骤在Windows和Linux操作系统上大体相同,但具体操作路径和命令可能有所不同。 步骤一:找到并修改pg_hba.conf文件 定位安装目录: Windows:通常在PostgreSQL的安装目录下的data文件夹中。Linux:位置可…...

Flink SQL 基础操作

Flink SQL是建立在Apache Flink之上的SQL处理引擎&#xff0c;它允许用户以SQL的方式处理流数据和批数据。以下是一些Flink SQL的基础操作&#xff1a; 一、环境准备 1.启动flink集群 ./start-cluster.sh启动sql-client ./sql-client.sh二、数据源定义 创建表&#xff08;…...

海思AE模块Lines_per_500ms参数的意义

​ 基础知识 1秒(S)1000毫秒(ms)1000_000微妙(s)1000_000_000纳秒(ns) 1GHz1000Mhz1000_000KHz1000_000_000Hz 1Hz1/s 抗频闪原理 海思AE模块参数中有一个LinesPer500ms的参数&#xff0c;意思为500ms对应的曝光行数。此个参数和抗频闪有关。 我们知道&#xff1a; 50HZ…...

【代码随想录】区间和——前缀和方法

本博文为《代码随想录》学习笔记&#xff0c;原文链接&#xff1a;代码随想录 题目 原题链接&#xff1a;58. 区间和&#xff08;第九期模拟笔试&#xff09; 题目描述 给定一个整数数组 Array&#xff0c;请计算该数组在每个指定区间内元素的总和。 输入描述 第一行输入为…...

Bug 解决 | 前端项目无法正确安装依赖?

目录 1、网络问题 2、权限问题 3、版本冲突 4、缓存问题 5、依赖配置错误 6、系统环境问题 前端项目和后端项目一样&#xff0c;都需要用到很多第三方的类库依赖。目前基本上我们主流的前端项目都使用 Npm、Yarn 等包管理工具来管理项目依赖&#xff0c;正常情况下通过执…...

【mysql 第四篇章】bin log 的作用是啥呢?

一、redo Log 介绍 redo log 是一种偏向物理性质的重做日志&#xff0c;因为他里面记录类似的这样的东西&#xff0c;“对那个数据也中的什么记录&#xff0c;做了个什么修改”。它是 InnoDB 存储引擎特有的东西。 二、bin Log 日志 bin log 叫做归档日志&#xff0c;它里面…...

Linux 操作系统:基于环形队列的生产者消费者模型

Linux 操作系统&#xff1a;基于环形队列的生产者消费者模型 一、前言二、大致框架二、P操作、V操作三、生产者生产数据四、生产者获取数据五、代码测试六、所有代码 一、前言 环形队列采用数组模拟&#xff0c;用模运算来模拟环状特性。和基于阻塞队列的生产者消费者模型不同的…...

python求解二次方程

为了找到x和y之间的关系&#xff0c;并假设这种关系是一个二次函数&#xff0c;我们可以使用numpy的polyfit函数来拟合一个二次方程&#xff08;即形式为y ax^2 bx c的方程&#xff09;。然后&#xff0c;我们可以使用matplotlib来绘制散点图&#xff0c;并在图上添加最佳拟…...

Spring框架面试总结

Spring基础 什么是spring框架 Spring 框架是一个用于构建企业级 Java 应用程序的开源框架。【Java项目快速构建轻量级框架】我们一般说 Spring 框架指的都是 Spring Framework&#xff0c;它是很多模块的集合&#xff0c;使用这些模块可以很方便地协助我们进行开发。【根据模…...

java之网络编程篇

前言 网络编程就是计算机和计算机之间通过网络进行数据传输&#xff0c;下面介绍一些概念和如何实现UDP和TCP两种模式的传输。 一、常见的软件架构C/S和B/S C/S架构需要一个客户端软件程序服务器 B/S只需要打开网页服务器 C/S架构的优缺点和应用场景 优点&#xff1a;画面可以…...

stm32f103c8t6与TB6612FNG解耦测试

stm32f103c8t6与TB6612FNG解耦测试 本文操作方式: 忽略底层,只做上层, 所以前面全部照搬步骤,重在调试 文章目录 stm32f103c8t6与TB6612FNG解耦测试本文操作方式:创建基本工程(1)跳转此链接,创建(2)创建电机驱动文件夹(3)PWM原理(4)电机转动控制 oled调试和key调试(5)OLED转速…...

2253336 - 资源库 - OAC0 中的脱机状态

症状 资源库的状态显示为离线。 环境 SAP 内容服务器 6.50 或更高版本与 MaxDB 存储媒介结合使用对于状态为离线的资源库&#xff0c;测试报表 RSCMST 运行正常资源库可在应用程序中使用&#xff0c;没有任何问题 重现问题 启动事务 OAC0双击资源库按 "CSADMIN"…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

动态规划-1035.不相交的线-力扣(LeetCode)

一、题目解析 光看题目要求和例图&#xff0c;感觉这题好麻烦&#xff0c;直线不能相交啊&#xff0c;每个数字只属于一条连线啊等等&#xff0c;但我们结合题目所给的信息和例图的内容&#xff0c;这不就是最长公共子序列吗&#xff1f;&#xff0c;我们把最长公共子序列连线起…...

python可视化:俄乌战争时间线关键节点与深层原因

俄乌战争时间线可视化分析&#xff1a;关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一&#xff0c;自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具&#xff0c;系统分析这场战争的时间线、关键节点及其背后的深层原因&#xff0c;全面…...