求助:排查按身高降序排序人名的Python代码问题
问题分析与修复方案
你的代码存在两个核心问题:
- 删除元素逻辑错误:使用
names.remove(names[heights.index(max(heights))])时,如果数组中有重复姓名,remove方法会删除第一个匹配该姓名的元素,而非当前最大身高对应的那个元素,直接破坏了姓名与身高的对应关系。 - 时间复杂度低效:每次循环都要遍历数组找最大值、查索引,还要执行删除操作,整体时间复杂度为O(n²),当数据量较大时会明显变慢。
正确实现方式
我们可以通过绑定姓名与身高的对应关系,按身高降序排序后提取姓名,既保证映射关系不丢失,又将时间复杂度优化到O(n log n)。
方法一:使用zip配对排序
def sortPeople(self, names: List[str], heights: List[int]) -> List[str]: # 将身高与姓名绑定,按身高降序排序 sorted_pairs = sorted(zip(heights, names), reverse=True) # 提取排序后的姓名列表 return [name for _, name in sorted_pairs]
方法二:通过索引排序
def sortPeople(self, names: List[str], heights: List[int]) -> List[str]: # 按身高从高到低排序索引 sorted_indices = sorted(range(len(heights)), key=lambda i: -heights[i]) # 根据排序后的索引获取对应姓名 return [names[i] for i in sorted_indices]
这两种方法都能正确处理重复姓名的场景,同时避免了修改原数组带来的潜在问题,执行效率也更高。
内容的提问来源于stack exchange,提问作者Mattheus
相关产品推荐
相关产品推荐

