给定一个正整数的集合A={a1,a2,….,an},是否可以将其分割成两个子集合,使两个子集合的数加起来的和相等。例A = { 1, 3, 8, 4, 10} 可以分割:{1, 8, 4} 及 {3, 10}的完整代码
时间: 2024-10-22 14:09:12 浏览: 32
delete--number.rar_K._delete namber_delete number_给定n位正整数
5星 · 资源好评率100%
这个问题是一个经典的算法问题,通常被称为“partition problem”或者“二分查找解决等和子集问题”。我们可以使用哈希表(Python 中的字典)结合贪心策略来解决。这里提供一个 Python 的解决方案:
```python
def can_partition(A):
target = sum(A) // 2 # 计算目标总和的一半
A.sort() # 先排序数组
left, right = 0, len(A) - 1
while left < right:
current_sum = A[left] + A[right]
if current_sum == target:
return True
elif current_sum < target:
left += 1 # 如果当前和小,增加左指针
else:
right -= 1 # 如果当前和大,减少右指针
return False # 没有找到满足条件的子集
# 测试例子
A = [1, 3, 8, 4, 10]
print(can_partition(A)) # 输出:True
阅读全文