JS两数之和

文章目录

  • 👓题目描述
  • 🕶思路
  • 🥼方法一
  • 🧤方法二
  • 🩲方法三
  • 🧥总结

👓题目描述

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

示例 1:

输入: nums = [2,7,11,15], target = 9
输出: [0,1]
解释: 因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入: nums = [3,2,4], target = 6
输出: [1,2]

示例 3:

输入: nums = [3,3], target = 6
输出: [0,1]

提示:

  • 2 <= nums.length <= 10(4)
  • -10(9) <= nums[i] <= 10(9)
  • -10(9) <= target <= 10(9)
  • 只会存在一个有效答案

🕶思路

第一个思路,使用了暴力枚举的思路,即通过两层for循环遍历数组中的所有元素对,并检查它们的和是否等于目标值。

另一个核心思路是利用哈希表来存储遍历过的元素和索引,以便在后续遍历中快速查找是否存在与当前元素相加等于目标值的另一个元素。
在这里插入图片描述

在这里插入图片描述

🥼方法一

虽然这种方法比较简单和直观,但是时间复杂度是O(n^2),时间效率不如使用哈希表的解法。

/*** 计算数组中两个数的和为目标值的索引对** @param nums 整数数组* @param target 目标值* @returns 包含两个索引的数组,表示和为 target 的两个数的索引;如果找不到,则返回空数组*/
let twoSum = function (nums, target) {for (let i = 0; i < nums.length; i++) {for (let j = 0; j < nums.length; j++) {if (nums[i] + nums[j] === target && i !== j) {return [i, j];}}}return [];
};

🧤方法二

使用哈希法的解法时间复杂度是O(n),因为我们只需要遍历一次数组。空间复杂度也是O(n),因为在最坏的情况下,我们可能需要将数组中的所有元素都存储到哈希表中。不过,由于这种解法在实际应用中通常能够快速地解决问题,因此它被广泛采用。

/*** 计算数组中两个数的和为目标值的索引对** @param nums 整数数组* @param target 目标值* @returns 包含两个索引的数组,表示和为 target 的两个数的索引;如果找不到,则返回空数组*/
let twoSum = function (nums, target) {let hash = {};// 遍历当前元素,并在map中寻找是否有匹配的keyfor (let i = 0; i < nums.length; i++) {if (hash[target - nums[i]] !== undefined) {return [hash[target - nums[i]], i];}// 如果没有找到匹配对,就把访问过的元素和下标加入到map中hash[nums[i]] = i;}return [];
};

🩲方法三

选择Map数据结构来存储数组元素及其索引,以便进行快速查找。

可以使用以下方法来操作Map对象中的元素。

  • has(key):检查Map对象中是否存在指定的键。
  • set(key, value):向Map对象中添加一个新的键值对。
  • get(key):根据键获取对应的值。
  • delete(key):从Map对象中删除指定的键值对。
/*** 计算数组中两个数的和为目标值的索引对** @param nums 整数数组* @param target 目标值* @returns 包含两个索引的数组,表示和为 target 的两个数的索引;如果找不到,则返回空数组*/
function twoSum(nums, target) {let map = new Map();for (let i = 0; i < nums.length; i++) {let num = nums[i];if (map.has(num)) {return [map.get(num), i];} else {map.set(target - num, i);}}return [];
}

🧥总结

本题其实有四个重点,把这四点想清楚了,本题才算是彻底理解了。

  • 为什么会想到用哈希表
  • 哈希表为什么用map
  • 本题map是用来存什么的
  • map中的key和value用来存什么的
  1. 为什么会想到用哈希表

当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。

  1. 哈希表为什么用map

在JavaScript中,Map 是一种内建的哈希表实现,它允许我们使用任何类型的键(key),不仅仅是字符串。在这个问题中,我们使用数字作为键,这是 Map 非常适合的场景。此外,Map 提供了简洁直观的 API 来进行键值的增删改查(set,get,has)操作。

  1. 本题map是用来存什么的

存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,某元素是否遍历过,也就是 是否出现在这个集合。

  1. map中的key和value用来存什么的

key来存元素,value来存下标。

📖参考笔记:代码随想录

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

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

相关文章

VScode运行C语言终端输出中文乱码问题解决方案

VScode运行C语言输出中文乱码问题解决方案 由于 VSCode 的终端是对系统的 cmd 命令行工具的调用&#xff0c;而 cmd 的默认编码为 GBK。当我们在 VSCode 中以 UTF-8 编码进行代码编写且代码里含有中文字符时&#xff0c;在终端运行代码便会出现中文乱码现象。要解决此问题&…

mysql查看和修改默认配置

1.查看最大连接数 SELECT max_connections; 或者 SHOW VARIABLES LIKE max_connections;2.查看当前连接的客户端 SHOW PROCESSLIST;2.临时设置最大连接数 SET GLOBAL max_connections 500;3.临时设置连接客户端交互超时时间 SET GLOBAL interactive_timeout 1800;4.永久生…

使用 rbenv 安装 Ruby 2.7.5

如果尚未安装 rbenv&#xff0c;可以使用 Homebrew 安装它&#xff1a; brew install rbenv brew install ruby-build初始化 rbenv&#xff1a; rbenv init在终端中运行以下命令将 rbenv 添加到你的 shell 中&#xff1a; open .bash_profile复制代码到文件中 eval “$(rbenv…

R语言机器学习算法实战系列(六)K-邻近算法 (K-Nearest Neighbors)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程下载数据加载R包导入数据数据预处理数据描述数据切割调节参数构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve保存模型总结优点:缺点:系统信…

Unity中通过给定的顶点数组生成凸面体的方法参考

这里我们使用了Quickhull for Unity插件&#xff0c;其实就是一个ConvexHullCalculator.cs文件&#xff0c;代码如下&#xff1a; /*** Copyright 2019 Oskar Sigvardsson** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software…

当下主流技术下,程序员如何在科技浪潮中找到价值所在

在当今技术日新月异的时代&#xff0c;科技的浪潮不断改变着世界的运作方式&#xff0c;也重塑了程序员们的职业道路。对于程序员来说&#xff0c;找到自身的价值所在&#xff0c;保持技能的持续更新&#xff0c;不仅是职业发展的必修课&#xff0c;更是适应未来科技社会的必然…

KdTree与八叉树的比较:如何在多维空间中有效管理数据

在计算机科学、机器人学和计算机图形学中&#xff0c;如何高效地管理和查询空间中的数据点是一个非常重要的问题。两种常用的数据结构KdTree&#xff08;K-Dimensional Tree&#xff09; 和 八叉树&#xff08;Octree&#xff09; 正是为此而设计。尽管它们的目标相似&#xff…

【Linux】僵尸进程和孤儿进程

一、僵尸进程 何为僵尸进程&#xff1f; 在 Unix/Linux 系统中&#xff0c;正常情况下&#xff0c;子进程是通过父进程创建的&#xff0c;且两者的运行是相互独立的&#xff0c;父进程永远无法预测子进程到底什么时候结束。当一个进程调用 exit 命令结束自己的生命时&#xff…

移除Microsoft Edge浏览器“由你的组织管理“提示的方法

背景&#xff1a; 点击Microsoft Edge浏览器右上角的按钮有时候会出现提示“由你的组织管理”。但实际上自己的电脑并没有被公司或其他企业管理。 解决方案&#xff1a; 提示&#xff1a;修改注册表如果操作不当会影响电脑&#xff0c;请提前备份注册表&#xff01;&#xff…

【Linux】【命令】diff

diff DescriptionsArgumentsExamples直接使用diff命令-u 输出格式-c 输出格式并列输出-s 和 -q 脚本示例示例1&#xff1a;目录及文件差异 Descriptions diff命令用于对比两个文件或者两个文件夹的不同之处&#xff0c;求基本语法如下所示&#xff1a; diff [OPTION]... FILES…

Oracle 11g 之 ADG 主备 Switchover 手动切换实践

全文目录&#xff1a; 开篇语&#x1f4dc; 前言&#x1f4d1; 摘要&#x1f4dd; 简介&#x1f50d; 概述&#x1f4bb; 核心源码解读&#x1f468;‍&#x1f4bb; 类代码方法介绍及演示 &#x1f4ca; 案例分析&#x1f310; 应用场景演示✅ 优缺点分析优点缺点 &#x1f9e…

ue5 扇形射线检测和鼠标拖拽物体

这里的NumTrace是要发射几根射线&#xff0c;Degrees Per Trace是每根射线之间的角度&#xff0c; 例如 要在角色面前实现一个180度的扇形射线检测&#xff0c;就需这两个变量乘起来等于180 TraceLength是射线的长度 下面是鼠标拖动物体逻辑&#xff0c;很简单 这里的Floor和…

【APIPost】学习与实践,如何使用 APIPost 测试 Java 后端项目

文章目录 1. 什么是 APIPost&#xff1f;2. 安装 APIPost3. APIPost 的基本界面介绍4. 基础功能介绍4.1 创建新请求4.2 设置请求头与参数4.3 查看响应结果4.4 保存请求 5. 环境变量配置5.1 创建环境变量5.2 在请求中使用环境变量 6. API 测试调试功能6.1 Mock 测试6.2 自动化测…

Unity DOTS中的Archetype与Chunk

Unity DOTS中的Archetype与Chunk 在Unity中&#xff0c;archetype&#xff08;原型&#xff09;用来表示一个world里具有相同component类型组合的entity。也就是说&#xff0c;相同component类型的entity在Unity内部会存储到一起&#xff0c;共享同一个archetype。 使用这样的设…

数据的全量加载和增量加载

全量和增量是数据加载过程中常用的两种方法&#xff0c;它们在数据提取和加载策略上有明显的区别&#xff1a; 全量加载&#xff08;Full Load&#xff09; 定义&#xff1a;全量加载是指每次将源系统中的所有数据提取并加载到目标系统中。 特点&#xff1a; 数据完整性&…

一篇文章入门Pytest!

目录 一、安装 二、语法 三、执行 四、前后置setup/teardown 五、fixture 六、数据驱动 七、报告 一、安装 需要安装的库 pytest pytest-html 生成HTML格式的测试报告 pytest-xdist 用例分布式执行&#xff0c;多CPU分发 pytest-ordering …

【Bug】iOS 不支持运行或调试你的项目的上一个生成版本。 请先确保生成解决方案,再运行或调试它。

文章目录 问题问题代码原因解决处理Bug的具体步骤 问题 在windows以hot restart&#xff08;hot restart不需要mac 而pair to mac需要&#xff09;的方式部署到iphone报&#xff1a;不支持运行或调试你的项目的上一个生成版本。 请先确保生成解决方案&#xff0c;再运行或调试…

基于SSM宠物信息交流平台JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

东芝TB67B008FTG三相无刷马达驱动IC

TB67B008FTG是一款无刷直流电机用的三相PWM驱动器&#xff0c;专为无传感器的应用场景设计。它具有一系列突出的功能&#xff0c;使其在现代电机控制中发挥重要作用&#xff0c;尤其是在需要高效、稳定运行的场景中。本文将详细介绍TB67B008FTG的特点、应用以及它在电机控制领域…

idea和webstorm性能优化

idea和webstorm性能优化 简介 今天打开了idea弹了一个弹窗&#xff0c;大概意思如下。 The IDE has detected Microsoft Defender with Real-Time Protection enabled. It might severely degrade IDE performance. It is recommended to add the following paths to the Def…