当前位置: 首页 > news >正文

贪心算法-2208.将数组和减半的最小操作数-力扣(LeetCode)

一、题目解析

这里要注意恰好这个字眼,说明对任意数减小一半是不需要向上取整的,所以我们需要定义double类型的数据。

二、算法解析

我们需要将数组和减小为一半的次数最少,所以根据贪心算法,我们需要取数组中最大的数进行减半操作 ,但最优解也许不是每次都选择最大数进行减半操作,为什么贪心解就是正确的解呢?这个会在最后证明。

解法:贪心+大根堆

由于每次需要取最大的数进行 减半操作,我们可以使用大根堆来存储数据。

统计数组和的同时将数据插入到大根堆中,top出最大的数对其减半,然后pop掉原来数据,并将减半后的数重新插入回去,计数器++,然后重复这样的行为直到数组和减少到至少一半为止。

这里的大根堆使用 priority_queue容器。

根据上面的解析先自己编写代码,链接:2208. 将数组和减半的最少操作次数 - 力扣(LeetCode)

三、代码示例

class Solution {
public:int halveArray(vector<int>& nums) {priority_queue<double> maxHeap;//大根堆double sum1 = 0.0;//sum1是原本的数组和for(auto e : nums){maxHeap.push(e);//插入元素sum1 += e;}double sum2 = sum1;//sum2是减半后的数组和int count = 0;while((sum1 - sum2) < (sum1/2))//当减小的部分大于或等于sum1的一半时,循环结束{double tmp = maxHeap.top();//获取堆顶元素maxHeap.pop();//删除堆顶元素sum2 -= tmp;sum2 += (tmp/2);maxHeap.push(tmp/2);count++;//计数器}return  count;}
};

 

 四、证明

证明方法:交换论证法

看到最后,如果对您有所帮助还请留下一个免费的赞和收藏,小编感激不尽,期待我们下期再见! 

相关文章:

  • 喷泉码在物联网场景下的案例分析
  • 安达发|高效智能塑料切割数控系统 - 全自动化软件解决方案
  • 使用python实现自动化拉取压缩包并处理流程
  • 怎么样才能在idea中写入spark程序
  • 如何在 IntelliJ IDEA 中编写 Speak 程序
  • 2023ICPC合肥题解
  • 深入解读:2024数据资产场景化评估案例手册(第二期)【附全文阅读】
  • Linux中的系统延时任务和定时任务与时间同步服务和构建时间同步服务器
  • 大模型的scaling laws:Scaling Laws for Neural Language Models
  • Prompt Engineering 提示工程:释放大语言模型潜力的关键技术与实践指南
  • 大语言模型(LLMs)微调技术总结
  • TensorFlow深度学习实战——基于循环神经网络的文本生成模型
  • es+kibana---集群部署
  • vscode 使用gitcode团队管理项目
  • 推荐一个微软官方开源浏览器自动化工具,可以用于UI自动化测试、爬虫等,具备.Net、Java、Python等多个版本!
  • Flutter介绍、Flutter Windows Android 环境搭建 真机调试
  • Python实现SSE流式推送
  • 【蒸馏(5)】DistillBEV代码分析
  • 关于华为云OneAccess登录认证过程介绍
  • 论文阅读_Search-R1_大模型+搜索引擎
  • 网警侦破特大“刷量引流”网络水军案:涉案金额达2亿余元
  • 格力电器去年净利增长一成:消费电器营收下滑4%,一季度净利增长26%
  • 加拿大警方:已确认有9人在温哥华驾车撞人事件中遇难
  • 强政神鸟——故宫里的乌鸦
  • 咖啡与乳腺健康之间,究竟有着怎样的复杂关系?
  • 牧原股份一季度归母净利润44.91亿元,同比扭亏为盈