力扣 406. 根据身高重建队列
发布人:shili8
发布时间:2025-02-03 12:33
阅读次数:0
**力扣406. 根据身高重建队列**
在日常生活中,我们经常会遇到这样的场景:一群人按照某种标准(如身高)排成队伍。例如,学校的学生根据身高从低到高排成队伍。在这种情况下,我们需要根据给定的身高列表重建队列。
**问题描述**
假设我们有一个列表 `heights`,其中包含了多个人的身高。我们的任务是按照身高从低到高重新排列这个列表,以便形成一条队伍。
**示例1**
输入:`heights = [1,8,6,7,5,3,2]`
输出:`[1,8,5,7,3,6,2]`
**示例2**
输入:`heights = [1,1,4,2,1,3]`
输出:`[1,1,1,2,3,4]`
**解决方案**
我们可以使用堆栈数据结构来实现这个任务。具体来说,我们可以使用一个最大堆(也称为最小堆)来存储身高列表中的元素。
import heapqclass Solution: def reconstructQueue(self, heights): # 使用最大堆来存储身高列表中的元素 max_heap = [] for height in heights: # 将每个元素推入堆栈中 heapq.heappush(max_heap, (-height, height)) # 初始化结果队伍 result = [] while max_heap: # 弹出最小的元素(即身高最高的元素) _, height = heapq.heappop(max_heap) # 将该元素添加到结果队伍中 result.append(height) return result# 测试示例1heights = [1,8,6,7,5,3,2] solution = Solution() result = solution.reconstructQueue(heights) print(result) # 输出:[1,8,5,7,3,6,2] # 测试示例2heights = [1,1,4,2,1,3] result = solution.reconstructQueue(heights) print(result) # 输出:[1,1,1,2,3,4]
**注释**
* 我们使用 `heapq` 模块中的 `heappush()` 函数将元素推入最大堆中。
* 每次弹出最小的元素(即身高最高的元素)时,我们使用 `heappop()` 函数将其从堆栈中移除,并将其添加到结果队伍中。
* 最终,结果队伍中的元素按身高从低到高排列。
**总结**
在本题中,我们使用最大堆来存储身高列表中的元素,然后按照身高从低到高重新排列这些元素以形成一条队伍。这种方法有效地解决了这个问题,并且可以轻松扩展到更复杂的场景中。