题目
代码

class Solution:
def halfQuestions(self, questions: List[int]) -> int:
cnt=Counter(questions)
cnt=dict(sorted(cnt.items(),key=lambda x:x[1],reverse=True))
ans=0
aim=len(questions)//2
for key in cnt:
if aim:
ans+=1
aim-=cnt[key]
aim=max(0,aim)
else:
return ans
return ans
【写法2】

class Solution:
def halfQuestions(self, questions: List[int]) -> int:
cnt=Counter(questions)
cnt=dict(sorted(cnt.items(),key=lambda x:x[1],reverse=True))
aim=len(questions)//2
for idx,key in enumerate(cnt):
aim-=cnt[key]
if aim<=0:
return idx+1
return -1
【写法3】

class Solution:
def halfQuestions(self, questions: List[int]) -> int:
n = len(questions) // 2
for k, v in enumerate(sorted(Counter(questions).values(), reverse=True)):
n -= v
if n <= 0:
return k + 1

本文探讨了三种Python解决方案,用于计算列表中询问次数的一半。通过Counter和排序,算法依次比较并减少目标数量。方法一使用计数排序,方法二关注遍历索引,方法三直接遍历计数值。
506

被折叠的 条评论
为什么被折叠?



