题目如下:
We have a collection of rocks, each rock has a positive integer weight.
Each turn, we choose the two heaviest rocks and smash them together. Suppose the stones have weights
x
andy
withx <= y
. The result of this smash is:
- If
x == y
, both stones are totally destroyed;- If
x != y
, the stone of weightx
is totally destroyed, and the stone of weighty
has new weighty-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
解题思路:非常简单的题目,每次取最大的两个数,如果存在多个最大的两个数,随机取其中两个即可。
代码如下:
class Solution(object): def lastStoneWeight(self, stones): """ :type stones: List[int] :rtype: int """ while len(stones) > 1: max_index = 0 second_max_index = 0 ol = sorted(stones) for i in range(len(stones)): if ol[-1] == stones[i]: max_index = i elif ol[-2] == stones[i] and max_index != i: second_max_index = i if stones[max_index] == stones[second_max_index]: if max_index > second_max_index: del stones[max_index] del stones[second_max_index] else: stones[max_index] -= stones[second_max_index] del stones[second_max_index] #print stones return 0 if len(stones) == 0 else stones[0]