给你一个数组,问你是否能将数组分成 4 等份,即每一份的数字总和都相等,你不能拆分数组中的数字,如果能得到有效划分就返回 true,否则返回 false。思路是什么
时间: 2024-10-23 14:16:14 浏览: 19
将一个数组按照固定大小进行拆分成数组的方法
5星 · 资源好评率100%
这个问题属于经典的数组求和平衡问题,通常可以用哈希表(HashMap 或者字典)来解决。步骤大致如下:
1. **初始化哈希表**:遍历数组,对于每个元素,将其值添加到哈希表中并更新对应的计数(或值的累加)。哈希表用于记录每个数值出现的次数。
2. **检查剩余条件**:遍历哈希表,计算当前元素值乘以其出现次数。如果这个乘积除以4余数不为0,则无法形成四个相等的部分,直接返回false。因为我们需要找到四等分,所以每个值的数量应能够被4整除。
3. **分配余数**:如果所有数值的乘积可以被4整除,那么我们尝试通过调整某些元素的个数来满足等分。首先减去最大的非零元素(出现次数最多的)数量的四倍,然后看是否还有剩余。如果有剩余,再尝试减去次大的元素,直到没有剩余为止。如果没有剩余或者找到了一种可行的分配方案,返回true;否则返回false。
```python
def canPartitionKSubsets(nums, k=4):
counts = [0]*max(nums) + [1]
total_sum = sum(nums)
if total_sum % k != 0:
return False
target = total_sum // k
for num in nums:
counts[num] += 1
while max(counts) > 0 and sum(counts) > k:
counts[0] -= counts[max(counts)]
counts[max(counts)] = 0
return sum(counts) == k
```
阅读全文