카테고리 없음
[LeetCode with Python] 1046. Last Stone Weight
papajohns
2020. 7. 8. 21:22
Difficulty : Easy
1st Approach : sort and erase one by one(suceeded but too slow)
from typing import List
class Solution:
def lastStoneWeight(self, stones: List[int]) -> int:
stones.sort(reverse=True)
while len(stones) >= 2:
#print(stones)
first = stones.pop(0)
second = stones.pop(0)
diff = first - second
if diff:
diff_i = 0
for i in range(len(stones)):
if diff >= stones[i]:
diff_i = i
break
if stones and diff < stones[-1]:
diff_i = len(stones)
stones.insert(diff_i, diff)
return stones[0] if stones else 0
if __name__ == "__main__":
#nums = [2,7,4,1,8,1]
nums = [3, 7, 8]
sol = Solution()
print(sol.lastStoneWeight(nums))
2nd Approach : use heap (so fast) - solution from (https://leetcode.com/problems/last-stone-weight/discuss/294956/JavaC%2B%2BPython-Priority-Queue)
from typing import List
import heapq
class Solution:
def lastStoneWeight(self, stones: List[int]) -> int:
arr = [-num for num in stones]
heapq.heapify(arr)
while len(arr) > 1:
print(arr)
heapq.heappush(arr, heapq.heappop(arr) - heapq.heappop(arr))
return -arr[0] if arr else 0
if __name__ == "__main__":
#nums = [2,7,4,1,8,1]
nums = [3, 7, 8]
sol = Solution()
print(sol.lastStoneWeight(nums))