1046. 最后一块石头的重量『简单』

题目来源于力扣(LeetCode

一、题目

1046. 最后一块石头的重量

题目相关标签:堆、贪心算法

提示:

  • 1 <= stones.length <= 30
  • 1 <= stones[i] <= 1000

二、解题思路

  1. 因 stones 数组中的大小不算大

  2. 那么每次对 stones 数组进行遍历,每次遍历都进行一次元素的升序排列

  3. 每次对数组最后的两个元素(排序后较大的元素)做相减操作,将相减得到的差赋值到其中一个索引上,另外一个索引的值则赋值为 0

  4. 直到数组中第二个较大的元素值为 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);
}
posted @ 2020-05-31 19:34  知音12138  阅读(238)  评论(0编辑  收藏  举报