Arrays 二重和

Arrays 二重和,arrays,list,sum,Arrays,List,Sum,我一直在研究二和问题: 给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标 我对允许重复的变化感到困惑。为什么如果有重复的,这是一个问题?我们不能只返回重复的索引吗?为了向其他人澄清,“重复变量”只是您所期望的:数字可能在数组中重复 如果你写了一个暴力算法,这并不重要 但通常的非暴力算法涉及将数字散列到其索引(即创建反向数组)。这样,给定一个目标T,检查T-Array[0]是否作为哈希键存在(在这种情况下,已找到解决方案),如果不存在,则继续执行T-Array[1],依此类推 现在

我一直在研究二和问题:

给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标


我对允许重复的变化感到困惑。为什么如果有重复的,这是一个问题?我们不能只返回重复的索引吗?

为了向其他人澄清,“重复变量”只是您所期望的:数字可能在数组中重复

如果你写了一个暴力算法,这并不重要

但通常的非暴力算法涉及将数字散列到其索引(即创建反向数组)。这样,给定一个目标
T
,检查
T-Array[0]
是否作为哈希键存在(在这种情况下,已找到解决方案),如果不存在,则继续执行
T-Array[1]
,依此类推

现在,如果所有数字都是唯一的,则上述方法有效。但是,如果数字可以重复,则存在以下情况,例如:

Array[] = {1, 3, 4, 4, 6, 8};
T = 8;
哈希必须包含4的一对多映射。因此,它涉及到确保您不会两次意外地从同一元素中创建一个和,例如


如果不允许重复,这应该可以工作

class Solution:
def twoSum(self, nums, target):
    """
    :type nums: List[int]
    :type target: int
    :rtype: List[int]
    """
    nums_l = len(nums);
    for i in range(0,nums_l):
        for j in range(0,nums_l):
            if (nums[i] + nums[j] == target and i != j):
                return [i,j];

可以对if语句稍作修改以允许重复。

您是否忘记提及重复变量是什么?这个问题似乎更适合,因为下面是对该问题的一个很好的概述,用另一种方式解释了这一点,以防我的解释不充分。但提供的解决方案似乎不能解释重复。它仍然是一个哈希映射/表。这意味着它只会覆盖以前的键。您可以将键设置为数字,将值设置为您看到它的次数。
class Solution:
def twoSum(self, nums, target):
    """
    :type nums: List[int]
    :type target: int
    :rtype: List[int]
    """
    nums_l = len(nums);
    for i in range(0,nums_l):
        for j in range(0,nums_l):
            if (nums[i] + nums[j] == target and i != j):
                return [i,j];