-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlastStoneWeight.js
46 lines (35 loc) · 1.47 KB
/
lastStoneWeight.js
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
/**
* @param {number[]} stones
* @return {number}
*/
var lastStoneWeight = function (stones) {
while (stones.length >= 2) {
stones.sort((a, b) => b - a);
if (stones[0] == stones[1]) {
stones.shift();
stones.shift();
} else {
stones[1] = stones[0] - stones[1];
stones.shift();
}
}
return stones.length ? stones[0] : 0;
};
console.log(lastStoneWeight([2, 7, 4, 1, 8, 1])); // 1
// https://leetcode.com/explore/featured/card/30-day-leetcoding-challenge/529/week-2/3297/
// 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