You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:排查按身高降序排序人名的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:20:28