Arrays 检查数组中的一对元素,其和等于给定的和
我从谷歌的一段编码视频中找到了这个片段 2.此外,该算法如何适应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() 组件添加()
- {1,2,4,6}给定和=8
{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)
asif(false)
c={}
=>if(comp.find(2)!=comp.end)
=>if(false!=false)
asif(false)
c={7}
=>if(comp.find(4)!=comp.end)
=>if(false!=false)
asif(false)
c={7,6}
=>if(comp.find(4)!=comp.end)
=>if(true!=false)
asif(true)
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