📅  最后修改于: 2023-12-03 15:22:22.300000             🧑  作者: Mango
当我们需要在一个数组中找到和为给定数值N的元素组合时,可以使用允许重复的数字来实现。这在一些题目中比禁止重复的解法更简单。
暴力求解是最简单的方法之一。它简单易懂,但效率较低。
代码示例:
def find_sum(arr, n):
result = []
for i in range(len(arr)):
for j in range(i + 1, len(arr)):
if arr[i] + arr[j] == n:
result.append((arr[i], arr[j]))
return result
复杂度:O(n^2)
使用哈希表可以大大提高效率。
代码示例:
def find_sum(arr, n):
result = []
hash_set = set()
for i in range(len(arr)):
temp = n - arr[i]
if temp in hash_set:
result.append((temp, arr[i]))
hash_set.add(arr[i])
return result
复杂度:O(n)
使用递归搜索也可以实现。
代码示例:
def find_sum_helper(arr, cur_index, target, res, curr):
if target == 0:
res.append(list(curr))
return
if target < 0 or cur_index >= len(arr):
return
curr.append(arr[cur_index])
find_sum_helper(arr, cur_index, target - arr[cur_index], res, curr)
curr.pop()
find_sum_helper(arr, cur_index + 1, target, res, curr)
def find_sum(arr, n):
result = []
curr = []
find_sum_helper(arr, 0, n, result, curr)
return result
复杂度:O(2^n)
以上三种方法中,哈希表方法效率比较高,时间复杂度最低,是推荐的方法。如果数组长度较小,使用暴力求解是可行的;若数组长度较大,使用递归搜索要比暴力求解更加有效。