首页 > 解决方案 > 查找三元组代码无法调试其抛出的垃圾值

问题描述

我已经编写了一个测试脚本来在 python 列表中查找三元组,这样在一个列表中,如果任何两项的总和并且列表中存在总和作为列表项,它必须注意该对是三元组,现在我的任务是计算有多少个三元组列表中确实存在有关此问题说明的更多信息,您可以在此处参考

现在可以使用两个循环(O(n^2))方法轻松完成,但为了使时间复杂度接近 O(n),即仅遍历列表项 n 次,其中 n 不是。元素列表有

Mine Approach is

我正在使用一个while循环i是从0到n而j将从i+1到n如果引用第二个元素索引的j交叉到n(最后一个元素)只有然后更新i完成所以现在我可以跳过当前元素没有三元组,现在注意 i+1 到 n 而 j 已经是 i+1 使其 j 始终处于领先地位 j=i+1

Respective python code for Approach Is:

def check(A,n):
 i=0
 j=i+1
 count=0
 while i<n:
  if j==n:
   i+=1
   j=i+1
  temp=A[i]+A[j]
  if temp in A:
   count+=1
   j+=1  #updation for not going to same loop secondth time
  else:
   j+=1
 return count 

def main():
 A=[]
 n=int(input('Define length:'))
 for a in range(0,n):
  x=int(input('Array[{}]'.format(a)))
  A.append(x)

 c=check(A,n)
 print(c)



main()

该方法很好,但代码不起作用它只是滞后为了解决它我在这里调试了代码 ,发现count变量最终返回垃圾值 local-variable-debugged-output & full-o/p

Note:(Optional)最初的问题是缺乏获得正确的价值Count,count 变量以垃圾收集的形式返回(您可以从发布的调试 o/p 的图片中签出)在得到用户 @PeterdeRivaz 的建议后,它被清除,因为循环正在运行,我们没有更新 i 索引以向前移动和最终处于永无止境的情况,因为我只是在 j 变为 == n 即最后一个索引(用于比较所有对)时才更新,并且没有其他条件变为真,所以从建议我更新 j+=1 到这两个条件,即使它失败了&即使它通过这些方式遍历是肯定的,那么在我遇到退出索引的问题之后,我发布了哪个解决方案我滞后但这个问题的真正解决者是@PeterdeRivaz 我知道给你一个巨大的呐喊帖子可能会被违反荣誉守则我不确定,但我写了这篇笔记,以便其他成员可以理解问题是什么以及它在此基础上变成了什么,我发布了这个答案。

标签: arrayspython-3.xalgorithmdata-structurestime-complexity

解决方案


如果您找到解决方案,即为temp in A真,那么您将增加计数,但不会更改循环变量 i 或 j。这意味着循环将在下一次迭代中在完全相同的位置重复,因此不会取得任何进展。

我建议更改代码,使其j+=1不在 else 分支中,但总是会发生。

顺便说一句,您可能应该将 A 转换为集合B=set(A)以加速 temp in A测试。


推荐阅读