1046. 最后一块石头的重量
有一堆石头,每块石头的重量都是正整数。
每一回合,从中选出两块最重的石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:
如果 x == y,那么两块石头都会被完全粉碎;
如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。
最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。
这算是我这个算法小白初次接触贪心算法碰到的第一个问题,结果还不是通过贪心解决的.... 因为贪心的思路我实在是有些不懂,明明有更好的解决方法 非要用那么复杂的...
这里面有几个注意的点 第一 数组的长度是size() 每次都记成length()
第二 排序算法如果不加第三个参数的话那么默认升序排序 也就是从小到大 加上第三个参数 greater<int>()那么就是降序,由大到小排序
第三 删除数组中的单个元素的确是用erase() 但是里面的参数注意是一个迭代器,而不是一个int型整数 比如str.bengin() str.end()之类的
这道题的思路很简单 就不说了 源代码如下:
class Solution {
public:
int lastStoneWeight(vector<int>& stones) {
while (stones.size() > 1) {
sort(stones.begin(), stones.end(), greater<int>());
if (stones[0] == stones[1]) {
stones.erase(stones.begin());
stones.erase(stones.begin());
} else {
stones[0] = stones[0] - stones[1];
stones.erase(stones.begin()+1);
}
//return stones.size();
}
if (stones.size() != 0) {
return stones[0];
}
return 0;
}
};










网友评论