zoukankan      html  css  js  c++  java
  • 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);
    }
    
  • 相关阅读:
    DS博客作业02--栈和队列
    指针
    C语言博客作业04--数组
    函数
    留言板
    第三周-自主学习任务-面向对象基础与类的识别
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/13020892.html
Copyright © 2011-2022 走看看