博客
关于我
LeetCode 1046. 最后一块石头的重量
阅读量:799 次
发布时间:2023-04-16

本文共 1096 字,大约阅读时间需要 3 分钟。

为了解决这个问题,我们需要找到一种高效的方法来处理石头的粉碎过程。每次操作选择两块最重的石头粉碎,直到只剩下一块石头或没有石头为止。

方法思路

我们可以使用优先队列(堆)来实现这一过程。优先队列可以帮助我们高效地获取当前最重的石头。具体步骤如下:

  • 初始化优先队列:将所有石头的重量放入一个最大堆中。
  • 处理石头:每次从堆中取出两块最重的石头。如果它们的重量相等,它们都会被粉碎,返回0。如果不相等,较重的石头会减少到两者之差,并将结果放回堆中。
  • 循环处理:重复上述过程,直到堆中只剩下一块石头或没有石头为止。
  • 这种方法的时间复杂度是O(n log n),其中n是石头的数量。每次操作的时间复杂度为O(log n),因为堆的插入和提取操作都是 logarithmic 时间复杂度。

    解决代码

    #include 
    #include
    using namespace std;int lastStoneWeight(vector
    &stones) { priority_queue
    q; for (int stone : stones) { q.push(stone); } while (q.size() >= 2) { int st1 = q.top(); q.pop(); int st2 = q.top(); q.pop(); int result; if (st1 == st2) { result = 0; } else { result = st1 - st2; } q.push(result); } return q.size() > 0 ? q.top() : 0;}

    代码解释

  • 初始化优先队列:我们使用一个最大堆来存储石头的重量。由于C++的priority_queue默认是最小堆,所以我们直接使用它,或者可以将值取负数来模拟最大堆。
  • 处理石头:在循环中,每次取出两个最重的石头。如果它们的重量相等,返回0,表示所有石头都被粉碎。如果不相等,计算它们的差值,并将差值放回堆中。
  • 循环处理:继续处理直到堆中只剩下一块石头或没有石头为止。最后,检查堆中是否有石头,返回堆顶的值或0。
  • 这种方法确保了每次操作都处理最重的石头,能够高效地解决问题。

    转载地址:http://udgfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现hamming numbers汉明数算法(附完整源码)
    查看>>
    Objective-C实现hanning 窗(附完整源码)
    查看>>
    Objective-C实现hanoiTower汉诺塔算法(附完整源码)
    查看>>
    Objective-C实现hardy ramanujana定理算法(附完整源码)
    查看>>
    Objective-C实现highest response ratio next高响应比优先调度算法(附完整源码)
    查看>>
    Objective-C实现hill climbing爬山法用来寻找函数的最大值算法(附完整源码)
    查看>>
    Objective-C实现hornerMethod霍纳法算法(附完整源码)
    查看>>
    Objective-C实现Http Post请求(附完整源码)
    查看>>
    Objective-C实现Http协议下载文件(附完整源码)
    查看>>
    Objective-C实现IIR 滤波器算法(附完整源码)
    查看>>
    Objective-C实现IIR数字滤波器(附完整源码)
    查看>>
    Objective-C实现insertion sort插入排序算法(附完整源码)
    查看>>
    Objective-C实现integer partition整数分区算法(附完整源码)
    查看>>
    Objective-C实现integerPartition整数划分算法(附完整源码)
    查看>>
    Objective-C实现interpolation search插值搜索算法(附完整源码)
    查看>>
    Objective-C实现Interpolation search插值查找算法(附完整源码)
    查看>>
    Objective-C实现intersection交集算法(附完整源码)
    查看>>
    Objective-C实现intro sort内省排序算法(附完整源码)
    查看>>
    Objective-C实现inversions倒置算法(附完整源码)
    查看>>
    Objective-C实现isalpha函数功能(附完整源码)
    查看>>