【贪心算法】将数组和减半的最小操作数

1.题目解析

2208. 将数组和减半的最少操作次数 - 力扣(LeetCode)

2.讲解算法原理

使用当前数组中最大的数将它减半,,直到数组和减小到一半为止,从而快速达到目的

重点是找到最大数,可以采用大根堆快速达到目的

3.代码

java 复制代码
class Solution {
    public int halveArray(int[] nums) {
        PriorityQueue<Double> heap=new PriorityQueue<>((a,b)->b.compareTo(a));//创建大根堆
        double sum=0;
        for(int x:nums){
            heap.offer((double)x);
            sum+=x;
        }
        int count=0;
        sum/=2.0;
        while(sum>0){
            double tmp=heap.poll()/2.0;
            sum-=tmp;
            count++;
            heap.offer(tmp);
        }
        return count;
    }
}

4.证明

证明方法:交换论证法

相关推荐
闲看云起36 分钟前
LeetCode-day5:三数之和
算法·leetcode·职场和发展
Xの哲學1 小时前
Linux 文件系统一致性: 从崩溃恢复到 Journaling 机制
linux·服务器·算法·架构·边缘计算
wtmReiner1 小时前
山东大学数值计算2026.1大三上期末考试回忆版
笔记·算法
黛色正浓1 小时前
leetCode-热题100-滑动窗口合集(JavaScript)
javascript·算法·leetcode
漫随流水1 小时前
leetcode算法(145.二叉树的后序遍历)
数据结构·算法·leetcode·二叉树
Tony_yitao1 小时前
22.华为OD机试真题:数组拼接(Java实现,100分通关)
java·算法·华为od·algorithm
2501_941875281 小时前
在东京复杂分布式系统中构建统一可观测性平台的工程设计实践与演进经验总结
c++·算法·github
sonadorje1 小时前
梯度下降法的迭代步骤
算法·机器学习
漫随流水1 小时前
leetcode算法(94.二叉树的中序遍历)
数据结构·算法·leetcode·二叉树
范纹杉想快点毕业2 小时前
嵌入式通信核心架构:从状态机、环形队列到多协议融合
linux·运维·c语言·算法·设计模式