📅  最后修改于: 2023-12-03 15:22:01.463000             🧑  作者: Mango
给定一个长度为N的数组,寻找其中N-1对元素,使得两个元素不同且它们的模数(X % Y)未在数组中预设。
def find_pairs(array):
n = len(array)
if n < 2:
return []
# 找到最小值和最大值
min_val = array[0]
max_val = array[0]
for i in range(1, n):
if array[i] < min_val:
min_val = array[i]
if array[i] > max_val:
max_val = array[i]
# 构建桶
bucket = [0] * (max_val - min_val + 1)
for i in range(n):
bucket[array[i] - min_val] = 1
# 遍历数组查找符合条件的元素对
pairs = []
for i in range(n):
for j in range(min_val, max_val + 1):
if array[i] % j != 0 and bucket[j - min_val] == 0:
pairs.append((array[i], j))
bucket[j - min_val] = 1
break
if len(pairs) == n - 1:
return pairs
return []
时间复杂度:O(N^2),其中N为数组长度。最坏情况下需要遍历数组N次,每次遍历需要遍历max-min+1个元素。
空间复杂度:O(M),其中M为最大值和最小值的差值,即桶的大小。