class Solution(object):
def highFive(self, items):
"""
这道题也可以转化为前K 大问题,分组后利用快排的思想
"""
def getK(array, start, end, K):
if start > end :
return
pivot, left, right = array[start], start, end
while left < right:
while left < right and array[right] <= pivot:
right -= 1
array[left] = array[right]
while left < right and array[left] >= pivot:
left += 1
array[right] = array[left]
array[left] = pivot
if left == K-1:
return
elif left > K-1:
getK(array, start, left-1, K)
else:
getK(array, left+1, end, K)
from itertools import groupby
items.sort(key=lambda x: x[0])
id_ = []
score = []
for key, group in groupby(items, lambda x: x[0]):
tmp = []
for s in group:
tmp.append(s[1])
id_.append(key)
getK(tmp, 0, len(tmp)-1, 5)
score.append(tmp)
result = []
for i in range(len(id_)):
result.append([id_[i], sum(score[i][:5]) // len(score[i][:5])])
return result
LC.1086. High Five
最新推荐文章于 2021-02-08 00:37:55 发布