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

【力扣每日一题】2023.7.25 将数组和减半的最少操作次数

目录

题目:

示例:

分析:

代码+运行结果:


题目:

示例:

分析:

题目给我们一个数组,我们每次可以将任意一个元素减半,问我们操作几次之后才可以将整个数组的和减半,这里的减半不是刚好减半,而是至少减去一半,所以我们多减一点是没关系的。

如果题目涉及到什么最大最小最多最少,那么我们大概率都是要用到贪心的思想。

既然要操作次数最小,那么我们每次把元素减半都应该尽量多减少一点,所以每次减少元素的一半,我们都应该把数组里最大的元素给减半。

那么我们就可以使用优先队列(大顶堆)来帮助我们维护数组的最大元素,然后每次把队列顶端(最大的数)拿出来,减半以后再放回去,并且把数组和对应的减去这个元素的一半。

如此循环操作直到数组和成功减半,我们返回次数即可。

代码+运行结果:

class Solution {
public:int halveArray(vector<int>& nums) {double SUM=0;priority_queue<double>pq;   //大顶堆(优先队列)for(const int &num:nums){   //统计总和并进入大顶堆SUM+=num;pq.push(num);}double target=SUM/2.0;  //获取总和的一半int res=0;while(SUM>target){  //不断循环直到SUM减半.res++;//获取栈顶(最大元素),把最大元素减半才能减少最多数double temp=pq.top();  pq.pop();temp/=2.0;SUM-=temp;  //总和减去该元素的一半pq.push(temp);  //减半后继续进入大顶堆}return res;}
};

 

http://www.lryc.cn/news/95697.html

相关文章:

  • Docker-Compose 轻松搭建 Grafana+InfluxDb 实用 Jmeter 监控面板
  • 异构线程池的c++实现方案
  • Python实现抽象工厂模式
  • @vue/cli安装
  • 用友全版本任意文件上传漏洞复现
  • 程序员面试系列,MySQL常见面试题?
  • 前端Web实战:从零打造一个类Visio的流程图拓扑图绘图工具
  • 2023牛客暑期多校第二场部分题解
  • 20230724将真我Realme手机GT NEO3连接到WIN10的电脑的步骤
  • 黑马 pink h5+css3+移动端前端
  • Docker的七项优秀实践
  • 【数据结构】24王道考研笔记——图
  • zabbix钉钉报警
  • Spring 源码解读
  • 练习时长两年半的网络安全防御“first”
  • HttpRunner自动化测试之响应中文乱码处理
  • idea使用命令将jar包导入到maven仓库中
  • zookeeper学习(一) Standalone模式(单机模式)安装
  • native webrtc支持切换音频采集设备和获取裸流
  • HR怎么看待PMP证书呢?
  • API接口:如何通过使用手机归属地查询
  • 小创业公司死亡剧本
  • 国产化的接口测试、接口自动化测试工具Apipost的介绍及使用
  • 【MySQL】不允许你不知道如何插入数据
  • Vue 渲染流程详解
  • 10分钟内入门 ArcGIS Pro
  • 【ribbon】Ribbon的使用与原理
  • axios封装到reques.js文件中
  • 学好Elasticsearch系列-核心概念
  • 扩展点都不知道不要说你用了Spring Boot