Tiene alguna sticks
con longitudes de números enteros positivos.
Puede conectar dos palos de longitudes X
y Y
sean en uno mediante el pago de un costo de X + Y
. De llevar a cabo esta acción hasta que haya un palo restante.
Devolver el costo mínimo de la conexión de toda la dada sticks
en una sola vara de esta manera.
Ejemplo 1:
Input: sticks = [2,4,3]
Output: 14
Ejemplo 2:
Input: sticks = [1,8,3,5]
Output: 30
Ideas: con PQ, cada sondeo de mínimo dos, para la adición; Tiempo: O (nlogn) Espacio: O (n)
class Solution {
public int connectSticks(int[] sticks) {
if(sticks == null || sticks.length == 0) {
return 0;
}
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
for(int i = 0; i < sticks.length; i++) {
pq.offer(sticks[i]);
}
int cost = 0;
while(pq.size() >= 2) {
int a = pq.poll();
int b = pq.poll();
pq.add(a + b);
cost += (a + b);
}
return cost;
}
}