首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的javascript bruteforce解决方案到twoSum的每次迭代都需要为变量j赋值?

JavaScript中的bruteforce解决方案通常用于解决问题,其中一个常见的问题是twoSum。在这个问题中,我们需要找到一个数组中两个数的和等于给定的目标值。

在bruteforce解决方案中,我们使用两个嵌套的循环来遍历数组中的每个元素,并检查是否存在两个数的和等于目标值。第一个循环用于选择第一个数,而第二个循环用于选择第二个数。

在每次迭代中,我们需要为变量j赋值的原因是,我们需要确保第二个循环从第一个循环选择的数的下一个位置开始。这是因为我们不希望重复计算已经考虑过的数对。

具体来说,第一个循环选择的数的索引为i,而第二个循环从i + 1开始选择数。这样可以确保我们只考虑每个数对一次,避免重复计算。

以下是一个示例代码,展示了如何使用bruteforce解决方案解决twoSum问题:

代码语言:txt
复制
function twoSum(nums, target) {
  for (let i = 0; i < nums.length; i++) {
    for (let j = i + 1; j < nums.length; j++) {
      if (nums[i] + nums[j] === target) {
        return [i, j];
      }
    }
  }
  return [];
}

在这个例子中,nums是输入的数组,target是目标值。函数将返回一个包含两个数的索引的数组,这两个数的和等于目标值。如果找不到这样的数对,函数将返回一个空数组。

这个解决方案的时间复杂度为O(n^2),其中n是数组的长度。这是因为我们需要遍历数组中的每个元素,并在嵌套的循环中进行比较。

腾讯云提供了多种云计算相关的产品和服务,例如云服务器、云数据库、云存储等。您可以根据具体的需求选择适合的产品。更多关于腾讯云产品的信息,请访问腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深入理解JavaScript闭包之什么是闭包

事实上,当定时器运行时即使每个迭代中执行的都是 setTimeout(.., 0),所有的回调函数依然是在循环结束后才会被执行。因此每次输出一个 5来。...但是实际上,根据作用域的原理,尽管循环中的五个函数都是在各自迭代中分别定义的,但是他们都封闭在一个共享的全局作用域中,因此实际上只有一个 i。即所有函数共享一个 i 的引用。...这样修改之后,在每次迭代内使用 IIFE(立即执行函数)会为每个迭代都生成一个新的作用域,使得延迟函数的回调可以将新的作用域封闭在每个迭代内部,每个迭代内部都会含有一个具有正确值的变量可以访问。...为什么总是 JavaScript 中闭包的应用都有着关键词 “return”, javaScript 秘密花园 中有一段话解释到:闭包是JavaScript 一个非常重要的特性,这意味着当前作用域总是能够访问外部作用域的变量...为什么匿名函数没有取得包含作用域的this对象呢?每个函数在被调用时会自动获取两个特殊的变量:this, arguments。

84830

读书笔记-你不知道的JavaScript(上)

本文首发在我的个人博客:http://muyunyun.cn/ 《你不知道的JavaScript》系列丛书给出了很多颠覆以往对JavaScript认知的点, 读完上卷,受益匪浅,于是对其精华的知识点进行了梳理...然后编译器会为 a = 2 这条语句生成执行代码,以供引擎执行该赋值操作。所以我们平时所提到的变量提升,无非就是利用这个先声明后赋值的原理而已!...可以将这个过程形象地想象成所有的声明(变量和函数)都会被“移动”到各自作用域的最顶端,这个过程称为提升。 可以看出,先有声明后有赋值。...}, j*1000 ) })(i); } 在迭代内使用 IIFE 会为每个迭代都生成一个新的作用域,使得延迟函数的回调可以将新的作用域封闭在每个迭代内部,每个迭代中都会含有一个具有正确值的变量供我们访问...重返块作用域 我们使用 IIFE 在每次迭代时都创建一个新的作用域。换句话说,每次迭代我们都需要一个块作用域。

1K100
  • 《你不知道的js(上卷)》笔记1(基础知识和闭包)

    \^0^ 首先,读本书让我了解到js的最重要的两个知识点——闭包还有this指向,其次一点的就是编译原理和对象原形。 这里记录一下闭包的相关知识。...2.闭包 JavaScript中闭包无处不在,你只需要能够识别并拥抱它。 闭包是基于词法作用域书写代码时所产生的自然结果,你甚至不需要为了利用它们而有意 识地创建闭包。...由于函数延迟执行,最终循环执行完才调用,得到i的值为6。 例2.2:匿名函数有自己的作用域,变量j用来在每个迭代中储存i的值。 例2.3:对例2.2代码的改进。...在迭代内使用IIFE会为每个迭代都生成一个新的作用域,使得延迟函数的回调可以将新的作用域封闭在每个迭代内部,每个迭代中都会含有一个具有正确值的变量供我们访问。...看了一遍书籍,然后通过记笔记,又回顾了一遍,一些不懂的知识这次就弄懂了,同时还发现了一些漏过的知识。 很久以前,隔壁班的某某每套卷子都要重复做上6遍,然后每次成绩都排列前茅。

    44620

    你不知道的Javascript:有趣的setTimeout

    从结果来看,for循环执行完跳出之后,才开始执行setTimeout(所以j才等于10),为什么不是每次迭代都执行一次setTimeout呢?...为什么不是每次迭代都执行一次setTimeout 大家都知道,JavaScript在ES6出现以前,是没有块状作用域的,这就意味着, 在for循环中用var定义的变量j,其实是属于全局的,即在全局范围内都可以被访问到...,既然如此,那其实整个全局作用域中就只有一个j,每次for循环都i是在更新这个j。...那么现在关键的问题在于,为什么整个for循环会先于setTimeout执行,而不是我们正常理解的,一次迭代执行一次。 这就涉及到了JavaScript的核心特性:单线程。...每次for循环的迭代,都将setTimeout中的回调函数加入任务队列等待执行。

    745100

    你不知道的Javascript:有趣的setTimeout

    别急,让我们先来思考一下,这段代码在浏览器中的执行结果是什么? 甲:顺序打印0到9? 乙:这题我见过,打印十个10! 哪个答案正确?我们继续上图: ?...从结果来看,for循环执行完跳出之后,才开始执行setTimeout(所以j才等于10),为什么不是每次迭代都执行一次setTimeout呢?...为什么不是每次迭代都执行一次setTimeout 大家都知道,JavaScript在ES6出现以前,是没有块状作用域的,这就意味着, 在for循环中用var定义的变量j,其实是属于全局的,即在全局范围内都可以被访问到...那么现在关键的问题在于,为什么整个for循环会先于setTimeout执行,而不是我们正常理解的,一次迭代执行一次。 这就涉及到了JavaScript的核心特性:单线程。...每次for循环的迭代,都将setTimeout中的回调函数加入任务队列等待执行。

    84040

    一位未曾涉足算法的初学者收获

    最后面试接近尾声时,面试官友情提醒我加强基础知识(算法),强调各种应用框架不断更新迭代,但计算机的底层基础知识是不变的。于是在面试官的建议下,便有了本文。 好吧,我承认我是为了面试才去学算法的。...而在算法中要避免的就是重复计算,这能够高效的节省执行时间,因此不妨定义一个缓存变量,在递归时将缓存变量也传递进去,如果缓存变量中存在则说明已计算过,直接返回结果即可。...以下代码将会采用 JavaScript 代码作为演示。 暴力枚举​ 我初次接触该题也只会暴力解法,遇事不决,暴力解决。也很验证了那句话:不论多久过去,我首先还是想到两个 for。...因为对我来说,这种微小的速度变化并不会被感知到,或者说绝大多数情况下,处理的数据规模都处在 n = 1 的情况下,此时我们还会在意 n² 大还是 2ⁿ 大吗?...但不可否认的是,算法对我当前而言是一种思维上的拓宽。让我意识到一道(实际)问题的解法通常不只有一种,如何规划设计出一个高效的解决方案才是值得我们思考的地方。

    19230

    LeetCode题解001:两数之和

    哈希表正是为此目的而构建的,它支持以 近似 恒定的时间进行快速查找。我用“近似”来描述,是因为一旦出现冲突,查找用时可能会退化到 O(n)。...但只要你仔细地挑选哈希函数,在哈希表中进行查找的用时应当被摊销为 O(1) 一个简单的实现使用了两次迭代。在第一次迭代中,我们将每个元素的值和它的索引添加到表中。...在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。...:在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。...> 在方法一的基础上,优化解法。想着,num2 的查找并不需要每次从 nums 查找一遍,只需要从 num1 位置之前或之后查找即可。

    56520

    Leetcode No.1 两数之和

    我用“近似”来描述,是因为一旦出现冲突,查找用时可能会退化到 O(n)。但只要你仔细地挑选哈希函数,在哈希表中进行查找的用时应当被摊销为 O(1)。 一个简单的实现使用了两次迭代。...在第一次迭代中,我们将每个元素的值和它的索引添加到表中。然后,在第二次迭代中,我们将检查每个元素所对应的目标元素(target - nums[i])是否存在于表中。...由于哈希表将查找时间缩短到 O(1),所以时间复杂度为 O(n)。 空间复杂度:O(n), 所需的额外空间取决于哈希表中存储的元素数量,该表中存储了 n个元素。...在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。...在表中进行的每次查找只花费 O(1)的时间。 空间复杂度:O(n), 所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存储 n个元素。

    17120

    JavaScript之作用域和闭包

    但 JavaScript 实际上会将其看成两个声明: var a; 和 a = 2; 。第一个定义声明是在编译阶段进行的。第二个赋值声明会被留在原地等待执行阶段。...事实上,当定时器运行时即使每个迭代中执行的是 setTimeout(.., 0) ,所有的回调函数依然是在循环结束后才会被执行,因此会每次输出一个 6 出来。...解决方案:使用 IIFE在每次迭代中将本次迭代的i传入创建的作用域并封闭起来; for (var i=1; i<=5; i++) { (function(j) { setTimeout...( function timer() { console.log( j ); }, j*1000 ); })( i ); } 在迭代内使用 IIFE 会为每个迭代都生成一个新的作用域...解决方案:在退出函数之前,将不使用的局部变量全部删除。 闭包会在父函数外部,改变父函数内部变量的值。

    70610

    力扣LeetCode,两数之和

    示例: 1 给定 nums = [2, 7, 11, 15], target = 9 2 3 因为 nums[0] + nums[1] = 2 + 7 = 9 4 所以返回 [0, 1] 我的答案:...我用“近似”来描述,是因为一旦出现冲突,查找用时可能会退化到 O(n)。但只要你仔细地挑选哈希函数,在哈希表中进行查找的用时应当被摊销为 O(1)。   一个简单的实现使用了两次迭代。...在第一次迭代中,我们将每个元素的值和它的索引添加到表中。然后,在第二次迭代中,我们将检查每个元素所对应的目标元素(target−nums[i])是否存在于表中。...在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。...在表中进行的每次查找只花费O(1)的时间。 2)、空间复杂度:O(n),所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存储n个元素。

    53720

    看完这几道 JavaScript 面试题,让你与考官对答如流(中)

    ,是因为IIFE会为每次迭代创建一个新的作用域,我们捕获i的值并将其传递给currentIndex参数,因此调用IIFE时,每次迭代的currentIndex值都是不同的。...为什么在调用这个函数时,代码中的b会变成一个全局变量? function myFunc() { let a = b = 0; } myFunc(); 原因是赋值运算符是从右到左的求值的。...因此,JS引擎在这个函数外创建了一个全局变量b,之后表达式b = 0的返回值为0,并赋给新的局部变量a。 我们可以通过在赋值之前先声明变量来解决这个问题。...ECMAScript 和 Javascript,本质上都跟一门语言有关,一个是语言本身的名字,一个是语言的约束条件 只不过发明JavaScript的那个人(Netscape公司),把东西交给了ECMA(...JavaScript(狭义的JavaScript)做什么都要问问ECMAScript我能不能这样干!如果不能我就错了!能我就是对的!

    2K10

    JavaScript 面试要点:作用域和闭包

    # try / catch 少有人会注意到 JavaScript 的 ES3 规范中规定 try /catch 的 catch 分句会创建一个块作用域,其中声明的变量仅在 catch 内部有效。...的每一个迭代中, 确保使用上一个循环迭代结束时的值重新进行赋值。...; }, j * 100); })(i); } // expected output: 0 1 2 3 4 在迭代内使用 IIFE 会为每个迭代都生成一个新的作用域,使得延迟函数的回调可以将新的作用域封闭在每个迭代内部...我们使用 IIFE 在每次迭代时都创建一个新的作用域。换句话说,每次迭代我们都需要一个块作用域 。 本质上这是将一个块转换成一个可以被关闭的作用域。...这个行为指出变量在循环过程中不止被声明一次,每次迭代 都会声明。随后的每个迭代都会使用上一个迭代结束时的值来初始化这个变量。

    45020

    LeetCode 1. 两数之和 Two Sum「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。...哈希表正是为此目的而构建的,它支持以 近似 恒定的时间进行快速查找。我用“近似”来描述,是因为一旦出现冲突,查找用时可能会退化到 O(n)O(n)O(n)。...但只要你仔细地挑选哈希函数,在哈希表中进行查找的用时应当被摊销为 O(1)O(1)O(1)。 一个简单的实现使用了两次迭代。在第一次迭代中,我们将每个元素的值和它的索引添加到表中。...在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。...复杂度分析: 时间复杂度:O(n)O(n)O(n), 我们只遍历了包含有 nnn 个元素的列表一次。在表中进行的每次查找只花费 O(1)O(1)O(1) 的时间。

    18820

    LeetCode 上第一题和第二题你会讲么?

    看了其他的代码,瞬间感觉为什么自己没有思考出来这么好的方法呢? LeetCode 第一题 LeetCode 上面的第一道题,也是入门基础的题,求和。...相信大家肯定也都知道,给你个数组,数组里面有一堆的数据,然后再给你一个数,找出数组里面相加等于这个数字的元素,并且把元素位置输出出来。...阿粉当时也冥思苦想还有没有其他的方案来实现,但是阿粉太low ,没有想到其他的解决方案,于是阿粉就开始所有,然后看看大家都是怎么想的,于是乎,发现了自己的想法确实还和广大网友差距不小呀,确实,阿粉的实现方式没什么错误...图示如下: 链表最左边表示个位数,代表 342 + 465 =807 我们应该怎么思考这个问题: 在看到这道题时,第一想法是逐个遍历链表的节点,将每个节点的数据取出并存储到String类型的数据中,再将这些...,将两个变量的初值均定义为0。

    40620

    读者六轮面试,终与字节无缘(详细面经)

    今天想分享的是一位来自读者投稿字节的面试记录(校招面经)。 首发内容来自掘金,读者小K,和他接触后才发现,他是大专,学历跟我差不多, 本科学历,求职的艰辛我都明白。...== 0.3 为什么 IEEE 754 了解吗 什么什么的几种(计算机组成原理相关的)算法? 不会,这个,计算机基础确实比较薄弱,之前没重视到 TCP 拥塞控制?...这么简单的题,我当时做的好像一个脑残,我要是面试官我也不想面了 你总结一下这场面试 计算机基础之前确实没重视到,之后也打算系统学习一下,但是说实话我对自己的编码能力挺自信的,虽然我不爱背 API n..., 每次报错信息都不太一样, 最开始视频架构部门面试打错了, 提示的挺详细啊, 又看一遍代码逻辑没错啊, 然后我就申请打开控制台了 image.png 然后开始解释思路, 抬头看下时间已经 25 分钟..., 好像我也没什么值得他问的了,感觉到面试官对我不感兴趣了,后面聊天打了个哈欠,我可能耽误人家午休了吧(下午两点),之后又贴近了镜头整了整头发,缺少亮点啊。

    64530

    作用域和闭包

    使用这些工具,任何库都无需将标识符加入到全局作用域中,而是通过依赖管理器的机制将库的标识符显式地导入到另外一个特定的作用域中。...的每一个迭代中, 确保使用上一个循环迭代结束时的值重新进行赋值。...; }, j * 100); })(i); } // expected output: 0 1 2 3 4 在迭代内使用 IIFE 会为每个迭代都生成一个新的作用域,使得延迟函数的回调可以将新的作用域封闭在每个迭代内部...我们使用 IIFE 在每次迭代时都创建一个新的作用域。换句话说,每次迭代我们都需要一个块作用域 。 本质上这是将一个块转换成一个可以被关闭的作用域。...这个行为指出变量在循环过程中不止被声明一次,每次迭代 都会声明。随后的每个迭代都会使用上一个迭代结束时的值来初始化这个变量。

    72020

    初学者对C语言中指针的爱恨情仇

    C语言中指针和数组的爱恨情仇 一、前言 你可能会有小疑问,爱什么?恨什么? 先说恨吧,相信刚学C语言的同志都恨过。...我一开始也不知道,后来经过在公司的一段时间内接触了HDMI、DVI、VGA等信号的驱动知识才了解到,C语言是可以直接操作寄存器的。但是也不能直接操作,而是通过一些特定的协议规则,例如:I2C协议。...四、跟我一起学 (一)C语言中的*和& 引用我其他博文中的一段话 1、C语言中为什么存在&和* C语言中大名鼎鼎的“指针”,想必你肯定听说过吧。...一个错误的示范: int *p1; p1 = 10; 我在没具体学习指针的时候,就这样做过。 编译的时候: 所以: 指针变量只能接收某个内存中的地址; 只能把地址赋值给指针变量。...; 那么我们可以把某个变量的地址赋值给某个指针变量,那么数组可不可以呢?

    49410

    Array主题系列{1,11,15,16,18,26,27,31,33,34题}

    初解:设置一个变量初始化最大面积值为0,从最左边的一条线开始向右迭代,跳过高度为0的线,对于迭代的每条线分别计算与其右边的每一条线进行计算区域面积,跳过高度为0的线,然后与当前最大面积比较,记录下最大面积值...初解:设置一个三重循环,分别对变量a,b,c的可能值进行迭代,设置一个集合来存储满足条件的结果实现自动去重,该方法的时间复杂度是O(n4logn)。...初解:设置四重循环,分别用于迭代搜索a,b,c,d所有可能的值,然后将满足条件的值的列表放入到一个不重复的集合中,该方法的时间复杂度为O(n5logn)。...优化解法:根据初解的结果可以看出解题思路正确但是搜索方式的时间复杂度过高,初解的搜索方式是遇到单个值的所有重复值后将后面所有数据整体向前移动来覆盖重复值,这涉及到后面整体数据,工作量大,时间耗费高,所以优化的目标是减少每次移动的数据量和总的移动次数...:每个排列所代表的值按照从后向前逐位递增,仅当当前位及后面所有位的值严格按照从大到小排列时,才向更高位递增,递增的值从当前位向后选取比高位现有的值大但最小的值作为新的高位值,而每次向更高位递增时,后面所有的位都要按照从小到大依次排列

    91660

    《算法日记-玩出新花样》- 两数求和的三种解法

    一、前言 大家好,我是小诚,终于,我还是将“魔爪”伸到了算法,在编写《算法日记》之前,我也考虑过许多问题,现在网上关于leetcode算法的案例这么多,我再重新"造轮子"有没有必要。...最后和圈子中的朋友聊了聊(有能够聊天的朋友还是不错的),其实这些担心都是多余的,在编写的过程中,我自己不仅在算法和文笔上有了进步,还可能会帮助到一些"有缘"看到文章的朋友,这样即使重复"造轮子"又如何。...nums.length; j++) 中,**这个的含义主要是:每轮都将最外层之前比较过的元素筛选出去,不再进行重复比较**,具体可以通过下面的案例来清楚认识到。...三、推导优化后的代码的时间复杂度   通过上面的案例步骤我们会发现,**随着每次循环的进行(即i++),内层循环的次数(即jj=i+1),呈现如下规律:n-...**相信开发的同学或多或少都听说过“使用时间换空间和使用空间换时间”这两个概念**,那么在这个题目中能否采用这个方式呢?

    38530
    领券