📅  最后修改于: 2023-12-03 15:09:37.204000             🧑  作者: Mango
给定一个正整数数组nums,将它们分成若干个子集,要求每个子集的元素都可以被该子集中最小的元素整除,且子集个数最少。如果有多个解,返回任意一个解。
输入:[1,2,3,4,5,6]
输出:[ [1,2,4], [3,6], [5] ]
本题需要使用贪心算法,具体步骤如下:
具体实现细节见代码注释。
class Solution:
def splitArray(self, nums: List[int]) -> List[List[int]]:
# 将数组排序,从小到大进行考虑
nums.sort()
# 用字典存储每个子集,键为子集的最小元素
subsets = {}
for num in nums:
# 查找能够放入num的子集中最小的那个子集
for k in subsets:
if num % k == 0:
subsets[k].append(num)
subsets[num] = subsets[k]
del subsets[k]
break
else:
# 如果找不到,则新建一个子集
subsets[num] = [num]
# 返回所有子集的集合
return list(subsets.values())