每一回合,从中选出两块最重的石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x b - a); for (int stone : stones) { pq.offer(stone); } while (pq.size() > 1) { int a = pq.poll(); int b = pq.poll(); if (a > b) { pq.offer(a - b); } } return pq.isEmpty() ? 0 : pq.poll(); }}[/code] 时间复杂度:
时间复杂度:O(nlogn),此中 n 是石头数量。每次从队列中取出元素需要泯灭 O(logn) 的时间,即从大跟堆中取堆顶元素,最多共需要粉碎 n−1 次石头(即每次取出两块石头的巨细都不相等)。