给定一个数组,找到元素对,其总和等于给定总和和 return 它们索引的总和

Given an array find element pairs whose sum is equal to the given sum and return the sum of their indices

大家好,正如您在问题中所读到的,我正在尝试在数组中找到等于给定总和的元素对以及 return 它们各自索引的总和。

我能够 return 给定总和的元素对,但未能 return 它们索引的总和。这是我的代码:

arr = [1, 4, 2, 3, 0 , 5]
sum = 7

x = min(arr)
y = max(arr)

while x < y:
    if x + y > sum:
        y -= 1
    elif x + y < sum:
        x += 1
    else:
        print("(", x, y, ")")
        x += 1

我的输出:

( 2 5 )    
( 3 4 )

这是我需要进一步做的:

2 + 5 = 7 → 指数 2 + 5 = 7;

3 + 4 = 7 → 指数 3 + 1 = 4;

7 + 4 = 11 → Return 11;

提前致谢!

您可以尝试使用嵌套循环:

arr = [1, 4, 2, 3, 0 , 5]
sums = 7
tlist = []
for i in range(len(arr)):
    for j in range(len(arr)-1):
        if (i!=j) and ((arr[i] + arr[j+1]) == sums):
            if (i,j+1) not in tlist and (j+1,i) not in tlist:
                tlist.append((i,j+1))
                print("index ->",i,"   ",j+1)
                print("sum=", i+j+1)

输出:

index -> 1     3
sum= 4
index -> 2     5
sum= 7

您可以使用 itertools 轻松检查 sum 是否有 combinations,例如,

>>> import itertools
>>> num = 7
>>> for a,b in itertools.combinations(arr, 2):
...   if a + b == num:
        aindex, bindex = arr.index(a), arr.index(b)
...     indices_sum = aindex + bindex
...     print('[element sum]: {} + {} = {} [indices sum]: {} + {} = {}'.format(a, b, a + b, aindex, bindex , indices_sum))
... 
[element sum]: 4 + 3 = 7 [indices sum]: 1 + 3 = 4
[element sum]: 2 + 5 = 7 [indices sum]: 2 + 5 = 7
>>> arr
[1, 4, 2, 3, 0, 5]

您可以采用不同的方法,计算差异,然后检查第一个数组中是否存在每个元素。

arr = [1, 4, 2, 3, 0, 5]
the_sum = 7

diff = [the_sum - x for x in arr]
for idx, elem in enumerate(diff):
    try:
        index = arr.index(elem)
        sum_of_indices = idx + index
        print("{} + {} = {}".format(idx, index, sum_of_indices))
    except ValueError:
        pass

输出

1 + 3 = 4
2 + 5 = 7
3 + 1 = 4
5 + 2 = 7

要删除重复项,获取索引元组frozenset总是很容易

a = [(2,1), (1,2), (3,2), (2,3)]
{frozenset(x) for x in a} # {frozenset({2, 3}), frozenset({1, 2})}