📅  最后修改于: 2023-12-03 14:55:51.088000             🧑  作者: Mango
给定一个整数数组 nums,你需要检查它是否可以被分成 N2
对,且每对中的元素和相等(即每对元素的和都是 sum(nums)/(N2)
)。
首先计算出数组的总和 total
,然后判断 total
能否被 N2
整除。如果不能被整除,直接返回 False
。
接下来对数组 nums
进行排序,然后使用双指针法,从数组的两端分别开始遍历,每次取出一对数相加,判断是否等于 sum(nums)/(N2)
。如果相等,继续遍历;如果不相等,直接返回 False
;如果遍历完整个数组,都没有返回 False
,则说明可以分成 N2
对,总和相等,返回 True
。
def can_partition(nums, N2):
total = sum(nums)
if total % N2 != 0:
return False
target = total // N2
nums.sort()
i, j = 0, len(nums) - 1
while i < j:
if nums[i] + nums[j] != target:
return False
i += 1
j -= 1
return True
n
为数组的长度,排序需要 $O(nlogn)$ 的时间复杂度,而双指针法只需 $O(n)$ 的时间复杂度。