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

数据结构与算法之集合: Leetcode 349. 两个数组的交集 (Typescript版)

两个数组的交集

  • https://leetcode.cn/problems/intersection-of-two-arrays/description/

描述

  • 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

示例 1

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

提示

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

算法实现

1 )使用数组filter+集合的has方法

function intersection (nums1: number[], nums2: number[]): number[] {return [...new Set(nums1)].filter(n => new Set(nums2).has(n)); // 这里filter内部函数每次都会new Set, 不合适
}
  • 这个算法的问题是代码书写逻辑重复,或者说因编码经验而导致的性能低下

2 )使用数组filter+集合的has方法 优化版

function intersection (nums1: number[], nums2: number[]): number[] {const n2 = new Set(nums2);return [...new Set(nums1)].filter(n => n2.has(n));
}
  • 只需要一次set, 无需循环中每次都做

3 )使用数组filter+数组includes方法或indexOf方法

function intersection (nums1: number[], nums2: number[]): number[] {return [...new Set(nums1)].filter(n => nums2.includes(n)); // 或 indexOf 来处理: nums2.indexOf(n) > -1
}

4 )排序 + 双指针

function intersection (nums1: number[], nums2: number[]): number[] {nums1.sort((x, y) => x - y);nums2.sort((x, y) => x - y);const length1 = nums1.length, length2 = nums2.length;let index1 = 0, index2 = 0;const intersection = [];while (index1 < length1 && index2 < length2) {const num1 = nums1[index1], num2 = nums2[index2];if (num1 === num2) {// 保证加入元素的唯一性if (!intersection.length || num1 !== intersection[intersection.length - 1]) {intersection.push(num1);}index1++;index2++;} else if (num1 < num2) {index1++;} else {index2++;}}return intersection;
}
  • 这种是官方示例,代码实现比较复杂,主要依靠两个数组的同一规则排序
  • 之后使用两个指针来指向当前元素,当两者相同时,如果唯一,则存储
  • 在实际应用中,虽然效率上还行,但是并不推荐上述算法实践,代码冗余
    • 时间复杂度主要在两个sort排序, nlogn + mlogm
    • 空间复杂度也是在两个sort排序,logn + logm

TS中的集合扩展

1 )Set操作,使用Set对象:new、add、delete、has、size

let mySet = new set();
mySet.add(1);
mySet.add(5);
mySet.add(5); // 不会保留多个5,只会保留1个
mySet.add('ssse');
let o = {name: 1};
mySet.add(o);
mySet.add({name:1}); // 会保留两个对象,它们内存地址是不同的console.log(mySet.has(1)); // true
console.log(mySet.has(3)); // false
console.log(mySet.has(5)); // true
console.log(mySet.has('ssse')); // true
console.log(mySet.has(o)); // truemySet.delete(5);

2 )迭代Set

// 迭代1 for of 迭代
for(let item of mySet) console.log(item);
// 迭代2
for(let item of mySet.keys()) console.log(item);
// 迭代3
for(let item of mySet.values()) console.log(item); // 值同key
// 以上三种迭代, 输出结果一致// 下面通过entries()方法来调用
for(let [key, value] of mySet.entries()) console.log(key, value); // 打印key和value果然完全一样

3 )Set 和 Array互转

// Set转Array, 方式1
const myArr = [...mySet];
// Set转Array, 方式2
const myArr = Array.from(mySet);
// Array转Set
const mySet2 = new Set([1,2,3,4])

4 )Set的交集和差集

// 求两个Set交集
const intersection = new Set([...mySet].filter(x => mySet2.has(x)))// 求两个Set差集
const difference = new Set([...mySet].filter(x => !mySet2.has(x)))

相关文章:

数据结构与算法之集合: Leetcode 349. 两个数组的交集 (Typescript版)

两个数组的交集 https://leetcode.cn/problems/intersection-of-two-arrays/description/ 描述 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1 输入&#xff1a;nums1 [1,2,…...

Unity 内存性能分析器 (Memory Profiler)

一、 安装 安装有两种方式一&#xff1a; add package : com.unity.memoryprofiler方式二&#xff1a; From Packages : Unity Registry 搜索 Memory Profiler 二、 使用 打开&#xff1a;Windows - > Analysis - > Memory Profiler 打开MemoryProfiler界面&#xff0…...

前端携带Bearer Token

前端携带Bearer Token 在前端使用 axios 发送请求时&#xff0c;可以通过设置请求头来携带 Bearer Token。Bearer Token 是一种常用的身份验证方式&#xff0c;它通常用于 OAuth2 授权流程中。 要在 axios 中携带 Bearer Token&#xff0c;可以通过设置 Authorization 请求头…...

leetcode 周赛 364

参考视频&#xff1a; 单调栈【力扣周赛 364】 文章目录 8048. 最大二进制奇数100049. 美丽塔 I100048. 美丽塔 II100047. 统计树中的合法路径数目 8048. 最大二进制奇数 题目链接 给你一个 二进制 字符串 s &#xff0c;其中至少包含一个 1 。 你必须按某种方式 重新排列 字…...

开机自启动Linux and windows

1、背景 服务器由于更新等原因重启&#xff0c;部署到该服务上的响应的应用需要自启动 2、Linux 2.1 方式一 编写启动应用的sh脚本授权该脚本权限 chmod 777 xxx.sh 修改rc.loacl 位置&#xff1a;/etc/rc.local 脚本&#xff1a;sh /home/xxxx.sh & 授权rc.local …...

科技云报道:大模型的阴面:无法忽视的安全隐忧

科技云报道原创。 在AI大模型的身上&#xff0c;竟也出现了“to be or not to be”问题。 争议是伴随着大模型的能力惊艳四座而来的&#xff0c;争议的核心问题在于安全。安全有两个方面&#xff0c;一个是大模型带来的对人类伦理的思考&#xff0c;一个是大模型本身带来的隐…...

2023年前端流行什么技术和框架了?

Web前端三大主流框架有React、Vue.js和Angular&#xff0c;由于接触过Vue.js&#xff0c;接下来主讲最新的Vue3.0&#xff01; Vue3.0作为最新版本的Vue.js框架&#xff0c;拥有更强大的性能和更丰富的功能&#xff0c;为低代码开发平台注入了全新的活力。而JNPF快速开发平台作…...

Nginx 背锅解析漏洞

Nginx 背锅解析漏洞 文章目录 Nginx 背锅解析漏洞1 在线漏洞解读:2 环境搭建3 影响版本&#xff1a;4 漏洞复现4.1 访问页面4.2 上传文件 4.3 上传失败4.4 使用bp进行分析包4.5 对返回图片位置进行访问4.6 执行php代码技巧-图片后缀加./php4.7 分析原因 --》cgi.fix_pathinfo--…...

AI与传统数据库 - ChatGPT风过之后 | 从Duet AI说开来

作者&#xff1a;Ni Demai&#xff0c;是NineData数据库产品专家&#xff0c;曾任阿里云数据库国际产品总负责人&#xff0c;华为高斯 GaussDB 创始团队核心架构师&#xff0c;IBM Db2 资深研发工程师。 Demai 专注 Cloud-Native database 架构设计&#xff0c;分析型 MPP&…...

L1-032 Left-pad C++解法

一、题目再现 根据新浪微博上的消息&#xff0c;有一位开发者不满NPM&#xff08;Node Package Manager&#xff09;的做法&#xff0c;收回了自己的开源代码&#xff0c;其中包括一个叫left-pad的模块&#xff0c;就是这个模块把javascript里面的React/Babel干瘫痪了。这是个…...

Python 用列表实现模拟手机通讯录(简易版)

"""列表实现好友管理系统知识点&#xff1a;1、列表存储信息2、列表增删改查3、嵌套循环4、字符串分割和拼接&#xff08;重点&#xff09;5、列表索引"""# 暂存好友信息&#xff08;程序结束数据删除&#xff09; friend_info list()input_buf…...

macOS使用官方安装包安装python

新手程序员可能想知道如何在 Mac 上正确安装 Python&#xff0c;这里介绍在 macOS 上安装 Python 的方法。 操作步骤 1.从 Python 官方网站 (python.org) 下载最新的 Python 版本. 单击 macOS 链接并选择最新的 Python 版本。 2.下载完成后&#xff0c;双击包开始安装Python…...

如何重装Windows Mirosoft Store

重装Windows Mirosoft Store 如何重装Windows Mirosoft Store呢&#xff1f;如何下载Windows Mirosoft Store呢&#xff1f;Windows Mirosoft Store不见了咋办&#xff1f;Windows 自带软件不见了咋办等等&#xff1f;写在前面 1.文件准备2.安装 如何重装Windows Mirosoft Stor…...

软考高级系统架构设计师系列论文真题七:基于构件的软件开发

软考高级系统架构设计师系列论文真题七:基于构件的软件开发 一、基于构件的软件开发二、找准核心论点三、理论素材准备四、精品范文赏析1.摘要2.正文3.总结软考高级系统架构设计师系列论文之:百篇软考高级架构设计师论文范文软考高级系统架构设计师系列之:论文题目类型、论文…...

git rebase 修改中间的commit

0. 前言 今天在移植最新版本 kfence 功能的时候&#xff0c;一共需要移植大概40多个 patch&#xff0c;中间有很多patch 存在冲突&#xff0c;需要手动修改后才能合并。当所有的patch 都合并完成进行编译的时候&#xff0c;发现其中一个 patch 手动合并出了个错误。 假如共有…...

登录业务实现 - token登录鉴权

登录业务实现&#xff1a; 登录成功/失败实现 -> pinia管理用户数据及数据持久化 -> 不同登录状态的模板适配 -> 请求拦截器携带token&#xff08;登录鉴权&#xff09; -> 退出登录实现 -> token失效&#xff08;401响应拦截&#xff09; 1. 登录成…...

内存对齐--面试常问问题和笔试常考问题

1.内存对齐的意义 C 内存对齐的主要意义可以简练概括为以下几点&#xff1a; 提高访问效率&#xff1a;内存对齐可以使数据在内存中以更加紧凑的方式存储&#xff0c;从而提高了数据的访问效率。处理器通常能够更快地访问内存中对齐的数据&#xff0c;而不需要额外的字节偏移计…...

贪心算法-会议室问题

1、题目描述 一些项目要占用一个会议室宣讲&#xff0c;会议室不能同时容纳两个项目。现在给你两个长度一样的数组&#xff0c;starts数组代码每个会议开始的时间&#xff0c;ends数组代表每个会议结束的时间。 在给你一个当前时间&#xff0c;请你求出当日可以利用会议室宣讲的…...

单日 5000 亿行 / 900G 数据接入,TDengine 3.0 在中国地震台网中心的大型应用

小T导读&#xff1a;为满足地震预警数据存储、检索和处理的建设与集成需求&#xff0c;以及响应国家国产软件自主可控的号召&#xff0c;中国地震台网中心决定选用国产数据库 TDengine 来存储和处理地震波形数据。本文将针对 TDengine 3.0 在地震领域的应用展开详细讲解。 关于…...

【VIM系列】cscope命令

cscope...

手把手教你用VSCode给Ai-WB2-12F烧录固件(含串口调试技巧)

手把手教你用VSCode给Ai-WB2-12F烧录固件&#xff08;含串口调试技巧&#xff09; 在物联网开发中&#xff0c;固件烧录是最基础也是最重要的环节之一。对于Ai-WB2-12F这款热门Wi-Fi/BLE双模模组&#xff0c;掌握高效的烧录方法能显著提升开发效率。本文将详细介绍如何利用VSC…...

Excel也能搞定GRR!不用买昂贵软件,这份保姆级模板和计算指南请收好

Excel也能搞定GRR&#xff01;不用买昂贵软件&#xff0c;这份保姆级模板和计算指南请收好 在制造业质量管理中&#xff0c;测量系统分析&#xff08;MSA&#xff09;是确保数据可靠性的基石。但现实情况是&#xff0c;许多中小企业和初创团队面对动辄上万元的专业统计软件只能…...

OpenHarmony基线移植实战:从开源仓到定制仓的完整路径

1. 为什么需要移植OpenHarmony基线&#xff1f; 第一次接触OpenHarmony基线移植时&#xff0c;我也很困惑&#xff1a;为什么不能直接用官方开源代码&#xff1f;非要折腾这一套移植流程&#xff1f;直到在实际项目中踩了几个坑才明白&#xff0c;基线移植是产品开发的必经之路…...

IIS请求筛选规则实战:手把手教你用‘拒绝字符串’精准拦截SQL注入和恶意爬虫

IIS请求筛选规则实战&#xff1a;构建精准防御体系的完整指南 当你的网站遭遇SQL注入攻击时&#xff0c;服务器日志里那些可疑的 OR 11--字符串是否让你夜不能寐&#xff1f;面对每天数十万次的恶意爬虫扫描&#xff0c;是否觉得传统的防火墙规则力不从心&#xff1f;IIS的请求…...

揭秘Captum归因算法:5种NLP文本分类与情感分析的最佳实践

揭秘Captum归因算法&#xff1a;5种NLP文本分类与情感分析的最佳实践 【免费下载链接】captum Model interpretability and understanding for PyTorch 项目地址: https://gitcode.com/gh_mirrors/ca/captum 在当今人工智能快速发展的时代&#xff0c;模型可解释性已成为…...

07-打造个性化 AI 助手

OpenClaw 第七篇:记忆系统进阶——打造个性化 AI 助手 “Memory is the treasury and guardian of all things.” — Cicero 在人工智能领域,有一个永恒的挑战:如何让 AI 记住「我是谁」、「你是谁」,以及「我们之前聊过什么」。OpenClaw 作为新一代 AI 自动化平台,构建了…...

Qwen3-14B部署后效果追踪:30天使用数据与关键指标增长分析

Qwen3-14B部署后效果追踪&#xff1a;30天使用数据与关键指标增长分析 1. 部署效果概览 在RTX 4090D 24GB显存环境下部署Qwen3-14B镜像后&#xff0c;我们对系统进行了为期30天的持续监测。数据显示&#xff0c;这套优化配置展现出令人印象深刻的稳定性和性能表现&#xff1a…...

思源宋体实战指南:7种字重构建与多语言字体优化技巧

思源宋体实战指南&#xff1a;7种字重构建与多语言字体优化技巧 【免费下载链接】source-han-serif Source Han Serif | 思源宋体 | 思源宋體 | 思源宋體 香港 | 源ノ明朝 | 본명조 项目地址: https://gitcode.com/gh_mirrors/sou/source-han-serif 思源宋体作为Adobe推…...

[拆解LangChain执行引擎-07] 静态上下文在Pregel中的应用

在 Pregel 模型中&#xff0c;静态上下文是一个专门设计的依赖注入容器。它的出现是为了解决在复杂的图计算中&#xff0c;如何优雅地处理“不属于图状态&#xff0c;但Node运行又必须依赖的外部环境信息”这一痛点。这些数据具有一个共同的性质&#xff0c;那就是在整个运行生…...

【实战】CodeBuddy使用技巧:5个Skills让编程效率翻倍的隐藏操作

目录摘要一、CodeBuddy不只是代码补全1.1 三种形态&#xff0c;覆盖全开发场景1.2 核心差异化二、Craft模式&#xff1a;一句话从0到上线2.1 实测案例&#xff1a;20分钟出一个完整MVP2.2 多模型切换策略2.3 Figma设计稿一键转代码三、5个效率翻倍的独有技巧3.1 技巧1&#xff…...