我进行了这样的连锁条件测试:
if find_num_3 != None and find_num_3 != i and find_num_3 != j: #don't reproduce itself
Run Code Online (Sandbox Code Playgroud)
在代码中:
for i in range(len(nums)):
num_1= nums[i]
sub_target = target - num_1
logging.debug(f"level_1_lookup: {lookup}")
for j in range(i+1, len(nums)):
num_2 = nums[j] #
num_3 = sub_target - num_2
find_num_3 = lookup.get(num_3) #
if find_num_3 != None and find_num_3 != i and find_num_3 != j: #don't reproduce itself
result = [num_1, num_2, num_3]
triplets.append(result)
logging.debug(f"lookup: {lookup} sub_nums: {nums[j:]} \nresult: {result}")
logging.info(f"\ttriplets: {triplets}\n\n\n\n")
return triplets
Run Code Online (Sandbox Code Playgroud)
如何将长链转变为紧凑的短结构。
if find_num_3 not in {None, i, j}
使用set而不是list或tuple,因为检查集合中元素的存在效率更高。~O(1)而不是复杂O(n)。
集将其数据存储为键/值对。关键是存储对象的哈希。这就是为什么您不能在集合中存储具有相同哈希值的多个对象的原因。由于哈希冲突,集合中的状态检查有时可能比O(1)多一点。
编辑
正如@chepner指出的那样,当仅在运行时(如在问题中)才知道值时,使用元组比使用set更有效,因为set实例化要比tuple实例化长。
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |