forked from mohitjain/leetcode_solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1046_last_stone_weight.rb
More file actions
53 lines (47 loc) · 1.61 KB
/
1046_last_stone_weight.rb
File metadata and controls
53 lines (47 loc) · 1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Leetcode problem: https://leetcode.com/problems/last-stone-weight/
#We have a collection of stones, each stone has a positive integer weight.
#
# Each turn, we choose the two heaviest stones and smash them together. Suppose the stones have weights x and y with x <= y. The result of this smash is:
#
# If x == y, both stones are totally destroyed;
# If x != y, the stone of weight x is totally destroyed, and the stone of weight y has new weight y-x.
#
# At the end, there is at most 1 stone left. Return the weight of this stone (or 0 if there are no stones left.)
#
#
#
# Example 1:
#
# Input: [2,7,4,1,8,1]
# Output: 1
# Explanation:
# We combine 7 and 8 to get 1 so the array converts to [2,4,1,1,1] then,
# we combine 2 and 4 to get 2 so the array converts to [2,1,1,1] then,
# we combine 2 and 1 to get 1 so the array converts to [1,1,1] then,
# we combine 1 and 1 to get 0 so the array converts to [1] then that's the value of last stone.
#
#
#
# Note:
#
# 1 <= stones.length <= 30
# 1 <= stones[i] <= 1000
# ----------------------------------------------------------------------------------------------------------------------
# @param {Integer[]} stones
# @return {Integer}
require_relative 'core/heap'
def last_stone_weight(stones)
max_heap = Heap.new :>
stones.each do |stone|
max_heap.add stone
end
until max_heap.empty?
element_biggest = max_heap.pop
element_bigger = max_heap.pop
return element_biggest if element_bigger.nil?
difference_after_smash = element_biggest - element_bigger
max_heap.add difference_after_smash
end
0
end
p last_stone_weight [2, 7, 4, 1, 8, 1]