JavaScript 中的二和问题

javascript 中的二和问题

总体思路

二和问题是一个经典的算法问题。它要求您在数组中查找两个数字,它们的总和达到所提供的特定 * 目标 *,然后从给定数组中返回它们的索引。

问题陈述

给定一个整数数组 nums 和一个整数目标,返回两个数字的索引,使它们相加等于目标。每个输入都只有一个解决方案,并且您不能两次使用相同的元素。

输入:nums = [2, 7, 11, 15],target = 9
输出:[0, 1]
解释:nums[0] nums[1] = 2 7 = 9

方法1 暴力破解

解决任何问题的第一个方法可能就是完成某件事,并且是概念上最简单的事情。

用两个循环迭代数组并检查所有数字对。

const twosum = (nums, target) => {  for(let i = 0; i < nums.length; i++) {    for (let j = i + 1; j < nums.length; j++) {      console.log(` i is ${nums[i]} and k is ${nums[j]}`)      // lets check if we add the 2 numbers if it equals target      if (target === nums[i] + nums[j]) {        return [i, j]      }    }  }};const nums = [2, 7, 11, 15];const target = 9;console.log(twosum(nums, target));

登录后复制

方法 1 复杂性

时间复杂度o(n²)

立即学习“Java免费学习笔记(深入)”;

嵌套循环检查每对数字检查每种可能的组合使用大数组时变得非常慢

空间复杂度o(1)
1.我们没有创建新的数据结构

方法 2 更高效,这就是我们想要的。

我们将使用哈希映射来解决这个问题。让我们稍微解释一下这个算法

我们使用哈希映射(javascript 中的对象)来存储我们看到的数字对于每个数字,我们计算其补码(目标 – 当前数字)我们检查补集是否存在于我们的地图中如果是,我们就找到了两个数字并返回它们的索引如果没有,我们将当前号码添加到地图

所以第一个解决方案可能是使用常规 js 对象并以这种方式构建我们的 hashmap

const twosumoptimizedregularobject = (nums, target) => {  const objectstuff = {}  // write a for loop, to go through the arr  for (let i = 0; i < nums.length; i++) {    const complement = target - nums[i]     if (complement in objectstuff) {      return [objectstuff[complement],i]    }    objectstuff[nums[i]] = i   }}const nums = [2, 7, 11, 15];const target = 9;console.log(twosumoptimizedregularobject(nums, target));

登录后复制

第二种解决方案实际上是在 js 中使用 map 数据结构。这允许更严格、更健壮的实现,使用 map 对象(在 es6 中引入)并且通常是首选。 map 提供显式哈希映射行为,并避免 javascript 对象的一些怪癖,例如从 object.prototype 继承属性。

const twoSumOptimized = (nums, target) => {  const mapOfStuff = new Map()  // write a for loop, to go through the arr  for (let i = 0; i < nums.length; i++) {    let complement = target - nums[i]    if (mapOfStuff.has(complement)) {      return [mapOfStuff.get(complement), i]    }    mapOfStuff.set(nums[i], i)  }}const nums = [2, 7, 11, 15];const target = 9;console.log(twoSumOptimized(nums, target));

登录后复制

方法 2 复杂性

时间复杂度o(n)

单次遍历数组哈希映射提供 o(1) 查找总时间与数组大小成线性关系

空间复杂度 为 o(n)
在最坏的情况下,我们可能会存储几乎所有数字
时间和内存效率之间的权衡

注意事项

空数组不存在解决方案有多种解决方案。在这种情况下,询问您是否在第一次迭代后返回。

以上就是JavaScript 中的二和问题的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2646145.html

(0)
上一篇 2025年3月7日 07:42:30
下一篇 2025年2月21日 14:11:29

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Webpack新特性详解及性能优化实践

    1. 长期缓存 webpack 5 通过确定性的 chunk id、模块 id 和导出 id 实现长期缓存,这意味着相同的输入将始终产生相同的输出。这样,当您的用户再次访问更新后的网站时,浏览器可以重用旧的缓存,而不用重新下载所有资源。 /…

    2025年3月7日
    200
  • 我做了一个简单易用的小费计算器

    您是否曾经发现自己在享用完一顿美餐后,不确定要给服务员多少小费?计算小费有时感觉就像是数学测验,尤其是当您与朋友一起用餐或分摊账单时。这就是小费计算器可以拯救世界的地方! 什么是小费计算器? 小费计算器是一个简单、用户友好的工具,旨在消除小…

    2025年3月7日
    200
  • JUnit 测试:Java 单元测试综合指南

    JUnit 测试是一种广泛使用的 Java 测试框架,它通过提供强大的工具和功能来简化单元测试的过程。本文探讨什么是 JUnit、它为何重要以及如何在 Java 项目中有效地使用它。 什么是 JUnit? JUnit 是一个开源框架,专为用…

    2025年3月7日
    200
  • 使用 Vite 进行静态 React 应用部署

    使用 vite 构建的 react 应用程序以其速度和效率而闻名。将这些应用程序部署为静态网站可确保快速的性能和可扩展性。在本博客中,我们将引导您使用 vite 部署静态 react 应用,使用现代平台来简化流程。 vite是什么? vit…

    2025年3月7日
    200
  • 人工智能驱动的代码生成:彻底改变开发

    人工智能 (AI) 正在改变开发人员编写、调试和维护代码的方式。人工智能工具现在为开发人员提供智能代码建议、自动化测试和无缝集成,使软件开发比以往更快、更高效。在这篇博文中,我们将探讨人工智能代码、其功能、优势、挑战以及可用的最佳工具。 什…

    2025年3月7日
    200
  • BIM 架构和建模:提高精度和性能

    BIM 建筑课程是您掌握建筑设计和施工未来的门户。随着行业不断拥抱数字化转型,建筑信息模型 (BIM) 已成为建筑师寻求简化工作流程、提高准确性和加强团队协作的一项基本技能。这些课程旨在为您提供创建智能、数据丰富的建筑模型所需的知识和实践经…

    2025年3月7日
    200
  • 探索 Nodejs 性能提升和令人兴奋的新功能

    Web 开发世界在不断发展,而 Node.js 早于这个快速变化的领域。作为当今 Web 应用程序的核心技术之一,Node.js 随着每次新的更新而进步,Node.js 22 尤其引人注目,因为它带来了每个开发人员都渴望发现的许多强大的新功…

    2025年3月7日
    200
  • 通过 Microsoft Learn 的最新培训提升您的安全专业知识

    Microsoft 在 Microsoft Learn 上推出了一套全面的安全培训模块,以满足 IT 专业人员、开发人员和安全团队的需求。这些互动课程专注于关键安全领域,包括: 身份和访问管理:掌握 Azure AD 等工具进行安全身份验证…

    2025年3月7日
    200
  • EchoAPI for Cursor 入门指南:断言可视化技术

    在api开发中,使用脚本进行断言起着至关重要的作用;然而,它们的复杂性可能会成为学习的障碍,常常给开发人员带来令人沮丧的体验。具体来说,检查某些响应所需的代码通常很冗长且难以理解,这给新团队成员带来了陡峭的学习曲线。这种复杂性可能会导致开发…

    2025年3月7日 编程技术
    200
  • 文本压缩和代码分割和现代图像格式 – 性能优化

    我尝试了以下方法来优化我的业余项目性能: 文本压缩代码分割现代图像格式. 分析器 我构建的应用程序使用了 vite 和 pnpm。现代 web 构建工具在构建过程中默认自动优化 web 性能。所以我们可以 pnpm run build 然后…

    2025年3月7日
    200

发表回复

登录后才能评论