2023.12.23力扣每日一题——移除石子使总数最小

2023.12.23

题目来源

力扣每日一题2023.12.23;题序:1962

我的题解

方法一 贪心思想+优先队列

首先很容易想到的就是使用贪心思想,也就是每次选择最大的石子堆进行移除。具体实现就是使用大根堆存储所有石子堆的大小,然后每次选择最大的石子堆进行移除。
时间复杂度 :O(k×logn+n)。其中 n是数组 piles的长度。将数组变为优先队列消耗 O(n),k 次入队列和出队列的操作,每次消耗 O(log⁡n),总的时间复杂度是 O(k×log⁡n+n)。
空间复杂度:O(n)。优先队列所需的空间

java 复制代码
public int minStoneSum(int[] piles, int k) {
        PriorityQueue<Integer> pq=new PriorityQueue<>((a,b)->b-a);
        int n=piles.length;
        for(int i=0;i<n;i++){
            pq.offer(piles[i]);
        }
        //选择石子堆进行移除
        while(!pq.isEmpty()&&k>0){
            int t=pq.poll();
            t=t-(int)Math.floor(t/2.0);
            if(t!=0)
                pq.offer(t);
            k--;
        }
        int res=0;
        while(!pq.isEmpty()){
            res+=pq.poll();
        }
        return res;
    }

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关推荐
LYFlied41 分钟前
【每日算法】LeetCode 153. 寻找旋转排序数组中的最小值
数据结构·算法·leetcode·面试·职场和发展
唐装鼠42 分钟前
rust自动调用Deref(deepseek)
开发语言·算法·rust
ytttr8732 小时前
MATLAB基于LDA的人脸识别算法实现(ORL数据库)
数据库·算法·matlab
jianfeng_zhu3 小时前
整数数组匹配
数据结构·c++·算法
smj2302_796826523 小时前
解决leetcode第3782题交替删除操作后最后剩下的整数
python·算法·leetcode
LYFlied4 小时前
【每日算法】LeetCode 136. 只出现一次的数字
前端·算法·leetcode·面试·职场和发展
唯唯qwe-5 小时前
Day23:动态规划 | 爬楼梯,不同路径,拆分
算法·leetcode·动态规划
做科研的周师兄5 小时前
中国土壤有机质数据集
人工智能·算法·机器学习·分类·数据挖掘
来深圳5 小时前
leetcode 739. 每日温度
java·算法·leetcode
LYFlied5 小时前
WebAssembly (Wasm) 跨端方案深度解析
前端·职场和发展·wasm·跨端