Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 检查数组中的一对元素,其和等于给定的和_Arrays_Algorithm - Fatal编程技术网

Arrays 检查数组中的一对元素,其和等于给定的和

Arrays 检查数组中的一对元素,其和等于给定的和,arrays,algorithm,Arrays,Algorithm,我从谷歌的一段编码视频中找到了这个片段 2.此外,该算法如何适应 {1,2,4,6}给定和=8 上面的代码片段是正确的。他们所做的是在comp中添加互补值(即,如果总和为8,则2具有互补值6),并且一旦找到互补值,就返回true。例如 {1, 2, 4, 6} Given Sum = 8 添加了7添加了6添加了4,现在当他们搜索6时,它不会返回comp.end,因此将输入if并返回true。要运行代码段,您必须做一些小的更改:- comp.end===>comp.end() 组件添加()

我从谷歌的一段编码视频中找到了这个片段

2.此外,该算法如何适应

  • {1,2,4,6}给定和=8
上面的代码片段是正确的。他们所做的是在comp中添加互补值(即,如果总和为8,则2具有互补值6),并且一旦找到互补值,就返回true。例如

{1, 2, 4, 6} Given Sum = 8

添加了7添加了6添加了4,现在当他们搜索6时,它不会返回comp.end,因此将输入if并返回true。

要运行代码段,您必须做一些小的更改:-

  • comp.end===>comp.end()
  • 组件添加()===>组件插入()

    • 首先,我意识到这是一个老问题。但我最近看了同样的视频,对同样的事情感到好奇(因为我不熟悉c++)。下面是我在做了一些挖掘之后学到的


      我认为一个很好的思考方法是考虑<代码> COMP.Eng/Engult>代码,这在技术上应该是<代码> COMP.Enter()/<代码>类似于<强> FalyValue.< 因此,如果我们允许,我们可以遍历第二个测试用例的每个迭代,并检查它是否有意义

      对于给定Sum=8的输入
      {1,2,4,4},在迭代结束时,无序集合中的补码将是
      c={7,6,4}

      因此,在for each中,if(comp.find(value)!=comp.end)
      的比较如下所示:

      • if(comp.find(1)!=comp.end)
        =>
        if(false!=false)
        =>
        if(false)
        as
        c={}
      • if(comp.find(2)!=comp.end)
        =>
        if(false!=false)
        =>
        if(false)
        as
        c={7}
      • if(comp.find(4)!=comp.end)
        =>
        if(false!=false)
        =>
        if(false)
        as
        c={7,6}
      • if(comp.find(4)!=comp.end)
        =>
        if(true!=false)
        =>
        if(true)
        as
        c={7,6,4}
      对于每个比较,您将得到
      false!=false
      将计算为
      false
      并不会进入返回
      true
      的if语句,直到您最终到达最后一次比较,其中
      true!=false
      计算结果为
      true

      (因为这个问题所基于的例子是在白板上完成的,所以我写了一个小例子来说明同样的逻辑。)


      *如果您阅读了一些关于它的文档,您将看到
      end()
      方法返回一个迭代器,该迭代器经过end元素,据我所知,它似乎在集合之外。(而
      find()
      方法在找到元素时返回一个迭代器,如果找不到则返回结束。)

      实际上,这里没有布尔值,因为它们实际上是迭代器值,可以相互比较(像
      comp.find(7)==comp.find(6)
      会计算为
      false
      ,尽管这两个值都在comp中),但我认为布尔值可能是一种更简单的方法(最初和本特定示例中)

      if(comp.find(value) != comp.end) // as in snippet or
      if(comp.find(value) == comp.end) // this one
      
      if(comp.find(value) != comp.end)
      
      {1, 2, 4, 6} Given Sum = 8