LeetCode 1366:团队排名解法的时间/空间复杂度分析疑问
LeetCode 1366 团队排名:时间/空间复杂度分析疑问
我已经解决了LeetCode 1366(团队排名)问题,但没法准确估算它的时间/空间复杂度。查看题解区后发现答案不一致,对此有疑问。以下是我的代码和算法思路:
class Solution: def rankTeams(self, votes: List[str]) -> str: rankings = {} team_count = len(votes[0]) for vote in votes: for position, team in enumerate(vote): if team not in rankings: rankings[team] = [0 for _ in range(team_count)] rankings[team][position] += 1 alphabetically_ordered_teams = sorted(rankings.keys()) final_ranking = sorted(alphabetically_ordered_teams, key = lambda team : rankings[team], reverse=True) return ''.join(final_ranking)
算法思路
- 遍历投票数组,构建哈希表:每个团队对应一个数组,数组第i位代表该团队在第i顺位获得的票数;
- 将哈希表的键按字母顺序排序;
- 以哈希表中的数组为排序依据,对字母顺序的团队列表进行降序排序(平局时按字母顺序),最后拼接成结果字符串。
我的复杂度分析(存疑)
我认为时间复杂度为O(N),空间复杂度为O(1),但不确定是否正确:
- 遍历投票数组的时间为O(N26),题目限制每个投票字符串长度≤26(小写字母),属于常数项*;
- 哈希表键的排序是O(1),因为最多只有26个键;
- 最终排序操作中,比较数组元素的时间最多为O(26²),整体排序复杂度为O(26log2626²),可简化为常数项*;
- 综上总时间复杂度为O(N),空间复杂度O(1)。
请问我的分析是否错误?
内容的提问来源于stack exchange,提问作者1sentenced
相关产品推荐
相关产品推荐

