贪心算法:2.将数组和减半的最少操作次数

题目链接:2208. 将数组和减半的最少操作次数(中等)

算法原理:

解法+证明:贪心

Java代码:

java 复制代码
import java.util.PriorityQueue;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 王洋
 * Date: 2025-10-30
 * Time: 09:24
 */
class Solution {
    //2208.将数组和减半的最小操作次数
    //自己写的时候出现的三个问题
    //1.我用的是int,但是这题需要用double
    //2.lambda表达式写成(a,b)->b.compareTo(a),而不是(a,b)->b-a
    //因为nums是int[]类型,跟double不兼容
    //3.while循环里直接-=这个数的一半就行了,而我一开始用循环又统计了一遍,导致超时
    public int halveArray(int[] nums) {
        PriorityQueue<Double> heap=new PriorityQueue<>((a, b)->b.compareTo(a));
        //入堆
        double sum0=0.0;
        for(int x:nums){sum0+=(double)x;heap.add((double)x);}
        sum0/=2.0;
        double sum=0.0;
        for(double x:heap) sum+=x;
        int ret=0;
        while(sum>sum0){
            double t=heap.poll();
            t/=2.0;
            heap.offer(t);
            sum-=t;
            // for(double x:heap) sum+=x;
            ret++;
        }
        return ret;
    }
}
相关推荐
C++、Java和Python的菜鸟4 小时前
第7章 Java高级技术
java·开发语言
程序员佳佳4 小时前
模型网关灰度不是调百分比:把放量、观测和回滚做成账本
java·数据库·人工智能·redis·gpt·aigc·embedding
可靠的仙人掌4 小时前
SAC(Soft Actor-Critic)算法底座
开发语言·算法·php
Listen·Rain5 小时前
Springboot整合Ollama实现调用本地多模型
java·spring boot·后端
霸道流氓气质5 小时前
Java 工程师 AI 智能体(Agent)完整学习路线
java·人工智能·学习
海石5 小时前
单调栈复健,顺便,牺牲一下吧,空间复杂度!一切献给AC
算法·leetcode
海石5 小时前
JS击败94%,Hard题想不到动态规划,那就用数组和栈试试
算法·leetcode
aaPIXa6226 小时前
C++模板元编程:编译期计算Fibonacci数列
java·开发语言·c++
SunnyDays10116 小时前
Java 编辑 PDF:从增删改查到加密保护
java·修改 pdf·编辑 pdf
球king6 小时前
CC GUI 插件:在 IDEA 中使用 CodeX
java·ide·intellij-idea