Javascript 成对和挑战

Javascript 成对和挑战,javascript,ecmascript-6,time-complexity,nested-loops,Javascript,Ecmascript 6,Time Complexity,Nested Loops,我已经有了工作代码,但我希望从整体上改进我理解和实现不同编码技术的方式。我认为这个问题提供了一个很好的机会来获得我所做工作的反馈 这里的想法是采用两个参数,一个数组和一个整数。标识数组中所有求和以生成整数参数的对,然后返回索引的和。不能重复使用索引,必须始终使用可用的最小索引。以下是FCC代码指南的说明: 所以,问题来了。在不使用嵌套for循环的情况下,有什么好方法可以做到这一点吗?我越来越意识到时间/空间的复杂性,我知道O(n^2)不会让我得到这份工作。 我可以想象会出现某种哈希图,但我只是没

我已经有了工作代码,但我希望从整体上改进我理解和实现不同编码技术的方式。我认为这个问题提供了一个很好的机会来获得我所做工作的反馈

这里的想法是采用两个参数,一个数组和一个整数。标识数组中所有求和以生成整数参数的对,然后返回索引的和。不能重复使用索引,必须始终使用可用的最小索引。以下是FCC代码指南的说明:

所以,问题来了。在不使用嵌套for循环的情况下,有什么好方法可以做到这一点吗?我越来越意识到时间/空间的复杂性,我知道O(n^2)不会让我得到这份工作。 我可以想象会出现某种哈希图,但我只是没有经验和知识知道如何使用它们

代码如下:

函数成对(arr,arg){
设usedIndex=[];
设输出=0;
for(设i=0;i成对([0,0,0,0,1,1],1)//应该返回10
为了获得更好的性能,您可以将arr.length保存到一个变量中,那么For循环不会对每个循环计数

函数成对(arr,arg){
设usedIndex=[];
设输出=0;
let length=arr.length;
for(设i=0;i}
为了获得更好的性能,您可以将arr.length保存到一个变量中,这样For循环就不会计算每个循环

函数成对(arr,arg){
设usedIndex=[];
设输出=0;
let length=arr.length;
for(设i=0;i}
通过巧妙地使用对象和索引只能使用一次的知识,这可以在一个循环中完成

函数成对(arr,arg){
设map={};
设输出=0;
let length=arr.length;
for(设i=0;ilog(成对([1,3,2,4],4),“应该是1”)通过巧妙地使用对象和索引只能使用一次的知识,这可以在一个循环中完成

函数成对(arr,arg){
设map={};
设输出=0;
let length=arr.length;
for(设i=0;i
  • 对列表进行排序
  • 从两端走两个柜台。在每个步骤中,检查总和是否符合您的要求。如果是,则捕获所需的度量
  • 步骤1是O(n*logn)

    第2步是O(n)——每个计数器将在列表的一半处运行,在它们相遇时停止

  • 对列表进行排序
  • 从两端走两个柜台。在每个步骤中,检查总和是否符合您的要求。如果是,则捕获所需的度量
  • 步骤1是O(n*logn)


    第二步是O(n)--每个计数器将在列表的一半处运行,在它们相遇时停止。

    这个问题可能更适合。我已经标记迁移到CR。有趣的是,在现实生活中,你很少这样做。:)既然您是按顺序逐步遍历每个数组,为什么需要检查组合是否已被使用?这个问题可能更适合您。我已标记迁移到CR。有趣的是,您在现实生活中很少这样做。:)既然您是按顺序逐步遍历每个阵列,为什么需要检查组合是否已被使用?聪明地使用地图!感谢您的回复,非常感谢。我得说我从来没有遇到过这种访问索引的方法。我试着把它打印出来,但它还是返回了NaN。你能告诉我它叫什么吗?我会做些调查的。你到底在印刷什么东西?语法基本上就是
    let key=arg-arr[i];console.log(map[key])-这是一个计算属性访问。@Klaycon感谢患者的回复。有一点大脑放屁,出于某种原因,我认为“-”是一种不公平的存取符号,比如[],我没有遇到过,而仅仅是一个常规的减号。另一个问题,你可能知道——为什么是s