[蓝桥杯算法从小白到大牛]贪心第二讲:将数组和减半的最少操作次数

目录

1->题目链接

2->题目解析

3->讲解算法原理

4->编写代码实现

5->您的专属鼓励师


1->题目链接

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

2->题目解析

        读完题目很简单的发现只需要每次把当前数组中的最大值减半就能达到最佳效果,得到最小次数

3->讲解算法原理

贪⼼策略:

        (1)每次挑选出「当前」数组中「最⼤」的数,然后「减半」

        (2)直到数组和减少到⾄少⼀半为⽌

        (3)为了「快速」挑选出数组中最⼤的数,我们可以利⽤「堆」这个数据结构

4->编写代码实现

class Solution {
public:
    int halveArray(vector<int>& nums) {
        priority_queue<double> heap; //创建一个大根堆
        double sum = 0.0;
        for(int x : nums)
        {
            heap.push(x); //把元素都放进大根堆中,并求出累加和
            sum += x;
        }
        sum /= 2.0;//算出目标和

        int count = 0;//计算次数

        while(sum > 0)// 依次取出堆顶元素减半,直到减到之前的⼀半或一半以下
        {
            double temp = heap.top()/2.0;
            heap.pop();
            heap.push(temp);
            sum -= temp;
            count++;
        }

        return count;
    }
};

 结果正确,欧耶!!!

5->您的专属鼓励师

        有些事情,你永远都没有办法做到“顶尖”,因为智力跟不上.但是所有的事情,你都可以做到“高段”,因为它需要的是时间的累积和精力的打磨.不聪明与聪明之间的区别,是很微妙的.有时候我们只会通过一次两次的结果,来判断整个人、整件事,其实这是不明智的.从小,邻居和亲戚在谈论我的时候,都会觉得我很聪明。但是只有我自己知道,我从来没有聪明过,只是看上去比较聪明而已.

        算法修行之路确实枯燥,但是我们把问题搞懂以后就发现他是那样的美妙!一遍学不会没关系吖,多看几遍,我也是学了好多遍呢,小伙伴们肯定学的又快又好!!!最后希望写的内容对小伙伴们有所帮助,我写的如果有哪里不对的地方请在评论区或者私信指出来哦!让我们一起进步吖,任何疑问包括心情不好都可以找我聊聊,我很乐意当你的倾听者吖.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫珂蛋儿吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值