贪心 | | 将数组和减半的最少操作数

news2024/9/28 23:38:59

目录

将数组和减半的最少操作数

除 2

将数组和减半的最少操作数

2208. 将数组和减半的最少操作次数 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/minimum-operations-to-halve-array-sum/description/

由题意可知,我们可以遍历数组,把数组中的每个数都减半,来实现把数组和减半,但是这样的操作数不是最少的,为了使操作数最少,显然,我们可以每次找出数组中最大的数,把最大的数减半后,继续去找数组中最大的数。

我们可以利用大根堆来帮助我们找出数组中最大的数,把数组所有的数都放进大根堆之后,堆顶就是数组中最大的数,我们把堆顶减半后,删除堆顶元素,删除后会得到一个新的大根堆,此时我们再去取出大根堆的堆顶,就可以得到减半之后数组的最大数,再继续进行减半操作。

但删除的堆顶不是一去不复返了,按照题目要求,减半后的数可以再次进堆,继续执行操作

以示例2为例,nums = [ 3 , 8 , 20 ],堆顶为20,20减半之后为10,而 10 仍然是这个数组的最大数,我们可以继续对 10 进行减半操作。

class Solution {
public:
    int halveArray(vector<int>& nums) {
        double sum=0;
        priority_queue<double> heap;//大根堆
        for(auto& e:nums)
        {
            sum+=e;
            heap.push(e);//入大根堆
        }
        sum/=2.0;//数组和的一半
        int count=0;//计数
        double t=0;
        while(sum>0)
        {
            t=heap.top()/2.0;//将大根堆最大的数减半
            heap.pop();//删除堆顶,因为堆顶已经计算过了
            sum-=t;
            heap.push(t);//把减半后的数再次进大根堆
            count++;//次数+1
        }
        return count;
    }
};

除 2

除2! (nowcoder.com)icon-default.png?t=N7T8https://ac.nowcoder.com/acm/problem/213140

和上一道题的思路类似,不过我们只能对偶数进行减半操作,故我们需要找出数组中最大的偶数,对偶数减半。 

#include<iostream>
using namespace std;
#include<queue>
int main()
{
    long long int n,k;//
    cin>>n>>k;
    long long int num=0;
    long long int sum=0;
    priority_queue<long long int> heap;//大根堆
    while(n--)
    {
        cin>>num;
        if(num%2==0)//偶数进堆
            heap.push(num);
        
        sum+=num;
    }
    while(k-- && heap.size())//堆为空 或者 可以操作的次数用完了,结束while循环
    {
        long long int t=heap.top();//堆顶
        t/=2;
        sum-=t;
        heap.pop();
        if(t%2==0)//减半后是偶数,进堆
            heap.push(t);
    }
    cout<<sum<<endl;
    return 0;
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1614859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高斯过程回归【详细数学推导】

机器学习笔记 第一章 机器学习简介 第二章 感知机 第三章 支持向量机 第四章 朴素贝叶斯分类器 第五章 Logistic回归 第六章 线性回归和岭回归 第七章 多层感知机与反向传播【Python实例】 第八章 主成分分析【PCA降维】 第九章 隐马尔可夫模型 第十章 奇异值分解 第十一章 熵…

[移动通讯]【无线感知-P1】[从菲涅尔区模型到CSI模型-3][Mobius transformations-3]

前言&#xff1a; 参考 Professor Bonfert-Taylors 《Mobius transformations》&#xff0c;我们重点理解 因此莫比乌斯变换是共形映射&#xff08; conformal mappinngs &#xff09;以及反演特性inversion 目录 mobious transfromation 定义 mobious transfromation 性质…

掌握item_get_app,提升电商推广转化率

一、引言 在数字化时代&#xff0c;电商行业蓬勃发展&#xff0c;竞争也日趋激烈。为了提高销售额和用户满意度&#xff0c;电商企业需要不断探索新的推广策略和技术手段。其中&#xff0c;掌握item_get_app技术&#xff0c;对于提升电商推广转化率具有重要意义。本文将深入探…

FreeRTOS之中断管理

1.中断简介&#xff1a; 2.中断优先级分组&#xff1a; 注意&#xff0c;中断优先级数值越低&#xff0c;其优先级越高。而在任务优先级数值越高&#xff0c;其优先级越大。 3.中断相关寄存器介绍&#xff1a; 4.系统中断优先级设置&#xff1a; FreeRTOS管理中断的两个函数&am…

屏幕太小?教你如何轻松将苹果电脑投射到安卓电视!

好几个人开组会&#xff0c;一台电脑怎么够看&#xff1f;那岂不是要好几颗脑袋挤在一起盯着屏幕&#xff1f;如果能将电脑屏幕投屏到大电视上&#xff0c;视觉就没有压力了。 将电脑屏幕投射到电视上&#xff0c;不仅能够让观众更加集中注意力&#xff0c;还能让信息的传递更加…

基于PyAutoGUI图片定位的自动化截图工具--完成了

1、计划 压测完成后需要编写性能测试报告&#xff0c;报告中所需数据截图较多&#xff0c;使用自动化操作方便快捷&#xff0c;就编写一个界面工具以便后续复用。 基于PyAutoGUI图片定位的自动化截图工具–jmeter部分 基于PyAutoGUI图片定位的自动化截图工具–jmeter部分&#…

Linux命令接着学习

which命令&#xff0c;找到各种命令程序所处在的位置 语法&#xff1a;which查找的命令 那么对于我们想查找其他类型文件所在的位置&#xff0c;我们可以用到find命令 find命令 选项为-name&#xff0c;表示按照文件名进行查找 find命令中通配符 find命令和前面rm命令一样&…

2024/4/21周报

文章目录 摘要Abstract文献阅读题目问题贡献方法卷积及池化层LSTM层CNN-LSTM模型 数据集参数设置评估指标实验结果 深度学习使用GRU和LSTM进行时间预测1.库的导入&数据集2.数据预处理3.模型定义4.训练过程5.模型训练 总结 摘要 本周阅读了一篇基于CNN-LSTM黄金价格时间序列…

数据结构与算法笔记:线性建堆

ACM大牛带你玩转算法与数据结构-课程资料 本笔记属于船说系列课程之一&#xff0c;课程链接&#xff1a; 哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep66799?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说系列课程-年度会…

IBM SPSS Statistics for Mac:强大的数据分析软件

IBM SPSS Statistics for Mac是一款功能强大的数据分析软件&#xff0c;专为Mac用户设计&#xff0c;提供了一系列专业的统计分析和数据管理功能。无论是科研人员、数据分析师还是学生&#xff0c;都能从中获得高效、准确的数据分析支持。 IBM SPSS Statistics for Mac v27.0.1…

Python与上位机开发day01

程序注释 程序注释主要是对代码进行解释说明&#xff0c;并不参与程序的运行 注释可以分为:单行注释和多行注释 1. 单行注释 单行注释以#开头,#后空一格后跟上注释的内容 # 这是单行注释 print(歪比巴卜)2. 多行注释 如果注释内容比较多的话,可以使用多行注释 多行注释以&…

电梯节能的推广意义

之前关于电梯能量回馈设备&#xff0c;小伍已经做了很多介绍&#xff0c;那么小伙伴们&#xff0c;他的推广意义你真的了解了么&#xff1f; 第一&#xff1a;节电降耗&#xff0c;电梯在运行过程中会产生大量的惯性能量&#xff0c;这些能量如果不被利用就会浪费。能量回馈技术…

SAP专家级实施商解读:SAP S/4HANA Cloud(PCE私有云) 的五大误解

五个关于SAP S/4HANA Cloud&#xff08;PCE私有云&#xff09;的重要疑问&#xff1a; ■ SAP太贵了&#xff1f; ■ SAP S/4HANA Cloud 只适用于大型企业&#xff1f; ■ ERP项目&#xff0c;尤其是 SAP 解决方案&#xff0c;太耗时了&#xff1f; ■ ERP项目/云项目没有优势&…

Sound Siphon for Mac:音频处理与录制工具

Sound Siphon for Mac是一款专为Mac用户设计的音频处理与录制工具&#xff0c;以其出色的性能、丰富的功能和简便的操作而备受赞誉。 Sound Siphon for Mac v3.6.8激活版下载 该软件支持多种音频格式&#xff0c;包括MP3、WAV、AAC、FLAC等&#xff0c;用户可以轻松导入各种音频…

一文扫盲(5):实验室管理系统的界面设计

本次带来第5期&#xff1a;实验室管理系统的设计&#xff0c;从系统定义、功能模块、界面构成和设计着力点四个方面讲解&#xff0c;大千UI工场愿意持续和大家分享&#xff0c;欢迎关注、点赞、转发。 一、什么是实验室管理系统 实验室管理系统是一种用于管理和监控实验室运作…

基于Springboot+Mybatis-Plus+mysql+html旅游网站

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

【每日算法】理论:深度学习基础 刷题:KMP算法思想

上期文章 【每日算法】理论&#xff1a;常见网络架构 刷题&#xff1a;力扣字符串回顾 文章目录 上期文章一、上期问题二、本期理论问题1、注意力机制2、BatchNorm 和 LayerNorm 的区别3、Bert 的参数量是怎么决定的。4、为什么现在的大语言模型都采用Decoder only架构&#x…

【CAD打开提示未处理异常C0000027(c0000027h)的两种解决方法。】

cad打开提示错误c0000027h的第一种解决方法 去掉区域里的beta语言勾选。 https://autodesk8.com/cad/86.html 如果第一种方法没解决&#xff0c;尝试第二种方法大概率能解决 点击autoremove的扩展功能&#xff0c;输入c0000027点击搜索&#xff0c;然后双击出现的这个按钮既可…

键盘打字练习游戏代码

效果图 部分代码 index.html <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width, initial-scale1.0" /> <meta http-equiv"…

初识java——jdk?环境变量?及关于安装jdk的步骤

文章目录 JDK的安装在安装JDK时遇到的问题&#xff1a; 背景知识一 什么是jdkjdk简介jdk文件详解&#xff1a;1 bin目录&#xff1a;2 lib目录&#xff1a;3 include目录.exe文件是可执行的应用程序&#xff0c;这个我们都清楚&#xff0c;但.dll文件又是做什么的呢&#xff1f…