首页
学习
活动
专区
工具
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。

81230

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

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

977100

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

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

43020

你不知道Javascript:有趣setTimeout

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

716100

你不知道Javascript:有趣setTimeout

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

81740

Leetcode No.1 两数之和

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

15220

LeetCode题解001:两数之和

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

54820

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

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

16330

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 会为每个迭代生成一个新作用域...解决方案:在退出函数之前,将不使用局部变量全部删除。 闭包会在父函数外部,改变父函数内部变量值。

68310

力扣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个元素。

51520

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

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

42120

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) 时间。

17420

看完这几道 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

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

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

35720

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

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

60030

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

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

44810

作用域和闭包

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

69420

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)。...优化解法:根据初解结果可以看出解题思路正确但是搜索方式时间复杂度过高,初解搜索方式是遇到单个值所有重复值后将后面所有数据整体向前移动来覆盖重复值,这涉及后面整体数据,工作量大,时间耗费高,所以优化目标是减少每次移动数据量和总移动次数...:每个排列所代表值按照从后向前逐位递增,仅当当前位及后面所有位值严格按照从大小排列时,才向更高位递增,递增值从当前位向后选取比高位现有的值大但最小值作为新高位值,而每次向更高位递增时,后面所有的位都要按照从小到大依次排列

85760

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

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

37230
领券