1046. 最后一块石头的重量『简单』
题目来源于力扣(LeetCode)
一、题目
题目相关标签:堆、贪心算法
提示:
1 <= stones.length <= 30
1 <= stones[i] <= 1000
二、解题思路
-
因 stones 数组中的大小不算大
-
那么每次对 stones 数组进行遍历,每次遍历都进行一次元素的升序排列
-
每次对数组最后的两个元素(排序后较大的元素)做相减操作,将相减得到的差赋值到其中一个索引上,另外一个索引的值则赋值为 0
-
直到数组中第二个较大的元素值为 0 时,结束循环,返回数组的最后一个元素(即是最后一块石头的重量)
三、代码实现
public static int lastStoneWeight(int[] stones) {
if (stones.length == 1) {
return stones[0];
}
if (stones.length == 2) {
return Math.abs(stones[0] - stones[1]);
}
// 数组元素个数大于 2 时,进行计算
for (int i = 0; i < stones.length; i++) {
Arrays.sort(stones);
// 排序后第一大的数字
int max_1 = stones[stones.length - 1];
// 排序后第二大的数字
int max_2 = stones[stones.length - 2];
if (max_2 == 0) {
// 第二大数字为 0 时,提前结束循环
return stones[stones.length - 1];
}
// 更新两个较大索引上的元素
stones[stones.length - 1] = max_1 - max_2;
stones[stones.length - 2] = 0;
}
return stones[stones.length - 1];
}
四、执行用时
五、部分测试用例
public static void main(String[] args) {
int[] stones = {2, 7, 4, 1, 8, 1}; // output:1
int result = lastStoneWeight(stones);
System.out.println(result);
}