leetcode 1046【最后一块石头的重量】
题目链接
https://leetcode-cn.com/problems/last-stone-weight/
解题思路与代码思路:
列表排序法
这个最直观,对列表进行排序,然后pop出来相减就完事了,while循环直到最后只剩下一个元素
最大堆法
首先把所有数字变成负数,就可以看成最大堆了。还是采用while循环,相减就完事了。最后再把负数转回来
代码:
列表排序法
class Solution:
def lastStoneWeight(self, stones: List[int]) -> int:
while len(stones)>1:
stones = sorted(stones)
stones.append(stones.pop()-stones.pop())
return stones[0]
最大堆法
class Solution:
def lastStoneWeight(self, stones: List[int]) -> int:
heap = [-i for i in stones]
heapify(heap)
while len(heap)>1:
heappush(heap, heappop(heap)-heappop(heap))
return -heap[0]
复 杂 度 分 析 : \color{red}{复杂度分析:} 复杂度分析:
- 列表排序法
- 时间复杂度:O(n^2logn),做n次快排
- 空间复杂度:O(1)
- 堆法
- 时间复杂度:O(n),heap操作为O(1)
- 空间复杂度:O(n) ,维护堆
本文介绍了解决LeetCode 1046题“最后一块石头的重量”的两种方法:列表排序法和最大堆法。列表排序法通过不断排序并计算两两之间的差值来实现,而最大堆法则将数字转换为负数以便于使用堆数据结构处理。两种方法均能有效地找到最后一块石头的重量。
996

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



