M-1282. Group the People Given the Group Size They Belong To
# 自己的方法 O(n), O(n)
from collections import defaultdict
class Solution:
def groupThePeople(self, groupSizes: List[int]) -> List[List[int]]:
group_map = defaultdict(list)
group_ids = [0]*len(groupSizes)
for i, group_size in enumerate(groupSizes):
if len(group_map[(group_size, group_ids[group_size-1])]) >= group_size:
group_ids[group_size-1] += 1
group_map[(group_size,group_ids[group_size-1])].append(i)
res = [group for group in group_map.values()]
return res
# 网友方法, 先还是把同数量的组的id放到一个list里,然后再用这个数量去均分这个list:
from collections import defaultdict
class Solution:
def groupThePeople(self, groupSizes: List[int]) -> List[List[int]]:
group_map = defaultdict(list)
for i, size in enumerate(groupSizes):
group_map[size].append(i)
res = []
for size, group_with_same_size in group_map.items():
for i in range(0, len(group_with_same_size), size):
res.append(group_with_same_size[i:i+size])
return res
# 网友原来的答案
class Solution:
def groupThePeople(self, groupSizes: List[int]) -> List[List[int]]:
'''
Example input-> groupSizes=[3,3,3,3,3,1,3]
Store in a dictionary[i] the list of indices of input array groupSizes that belong to a group size i
'''
group_map = collections.defaultdict(list)
for idx,i in enumerate(groupSizes):
group_map[i].append(idx)
'''
print (group_map )-> defaultdict(<class 'list'>, {3: [0, 1, 2, 3, 4, 6], 1: [5]})
group_map[i] has list of indices of input array groupSizes that belong to groupsize i
Next, create lists of size i parsing through group_map[i], and append them to answer[].
Further since a solution is guaranteed to exist, len(group_map[i])/i will always be perfectly divisible.
Infact, len(group_map[i])/i gives exactly the number of groups of size i
'''
answer=[]
for key, lst in group_map.items():
for idx in range(0, len(lst), key):
answer.append(lst[idx:idx + key])
return (answer)
Last updated
Was this helpful?