"从数组中找出满足a+b = c+d的两个数对"(python)

题目描述:给定一个数组,找出数组中是否有两个数对(a,b)和(c,d),使得a+b = c+d,其中,a,b,c和d是不同的元素。如果有多个答案,打印任意一个即可。例如给定数组:[3,4,7,10,20,9,8],可以找到两个数对(3,8)和(4,7),使得3+8 = 4+7.

解题思路:最简单的方法就是使用四重遍历,对所有可能的数对,判断是否满足题目要求,如果满足则打印出来,但是这种方法的时间复杂度为O(n**4)。 因此我们采用另一种方法——字典法,算法的主要思路为:以数对为单位进行遍历,在遍历的过程中,把数对和数对的值存储在字典中(键为数对的和,值为数对),当遍历到一个键值对时,如果他的和在字典中已经存在,那么就找到了满足条件的键值对。

class pair:
    def __init__(self, first, second):
        self.first = None
        self.second = None
        self.first = first
        self.second = second

    def findPairs(array):
        sumPair = dict()  # 创建一个字典,其中键为数对的和,值为数对
        n = len(array)
        # 遍历数组中所有可能的数对
        i = 0
        while i < n:
            j = i+1
            while j < n:
                # 如果这个数对的和在map中没有,则放入map中
                sums = array[i] + array[j]
                if sums not in sumPair:
                    sumPair[sums] = pair(i, j)
                else:
                    # 找出已经遍历过的并存储在map中和为sum的数对
                    p = sumPair[sums]
                    print( "("+str(array[p.first])+","+str(array[p.second])+"), ("+str(array[i])+", "+str(array[j])+")")
                j += 1
            i += 1
        return False
if __name__ =="__main__":
    array = [3, 4, 7, 10, 20, 9, 8]
    print(pair.findPairs(array))

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过以下代码找出不是个数组共有的元素: ```python a = [1, 2, 3, 4, 5] b = [4, 5, 6, 7, 8] not_common = [x for x in a + b if (x not in a) or (x not in b)] print(not_common) ``` 输出结果为: ``` [1, 2, 3, 6, 7, 8] ``` 这里使用了列表推导式,将个数组合并成一个,然后筛选出不在个数都出现过的元素。 ### 回答2: 在 Python ,我们可以使用集合(Set)的差集操作来找出个数组不共有的元素。下面是具体的步骤和代码实现。 首先,我们需要将个数组转换为集合类型,并将它们相减,得到它们的差集。例如,假设我们有个数组 a 和 b,我们可以使用如下代码来找出它们不共有的元素: ``` a = [1, 2, 3, 4, 5] b = [3, 4, 5, 6, 7] diff = set(a) - set(b) ``` 其,`set(a)` 和 `set(b)` 分别将数组 a 和 b 转换为集合类型,`-` 表示集合的差集操作,`diff` 就是个数组不共有的元素。在这个例子,`diff` 的结果是 `{1, 2}`,表示数组 a 与数组 b 不重复的元素为 1 和 2。 如果我们想要找到个数组共有的元素,可以使用集合的交集操作。例如,我们可以使用如下代码来找出数组 a 和 b 共有的元素: ``` a = [1, 2, 3, 4, 5] b = [3, 4, 5, 6, 7] common = set(a) & set(b) ``` 其,`&` 表示集合的交集操作,`common` 就是个数组共有的元素。在这个例子,`common` 的结果是 `{3, 4, 5}`,表示数组 a 和 b 共有的元素为 3、4 和 5。 总的来说,使用集合的差集操作可以方便地找出个数组不共有的元素,而使用集合的交集操作可以方便地找出个数组共有的元素,这些操作可以为我们的编程工作提供便利。 ### 回答3: 在Python,可以使用set(集合)和列表之间的差异来找到个数不共有的元素。 首先,我们需要创建个列表或数组,并将它们转换成集合,以便使用集合的操作来找到它们之间的差异。 例如,假设有个数组a和b: a = [1, 2, 3, 4, 5] b = [4, 5, 6, 7, 8] 我们可以将它们转换成集合,使用“ - ”符号来找到它们之间的差异: a_set = set(a) b_set = set(b) diff = a_set - b_set 最后,我们可以将结果转换回列表的形式来获取不共有的元素: result = list(diff) print(result) 在这个例子,输出将是[1, 2, 3, 8, 7, 6],因为这些元素只存在于一个数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值