Minimum Cost to Hire K Workers

HardArrayGreedySortingHeap (Priority Queue)

Solution

import { Heap } from '@algorithm/lib';
 
export function mincostToHireWorkers(quality: number[], wage: number[], k: number): number {
  const workers = quality.map((q, i) => [wage[i] / q, q]).sort((a, b) => a[0] - b[0]);
 
  let answer = Number.MAX_SAFE_INTEGER;
  let qualitySum = 0;
  const heap = new Heap<number>((a, b) => a - b);
  for (const [r, q] of workers) {
    heap.push(-q);
    qualitySum += q;
    if (k < heap.length) {
      qualitySum += heap.pop()!;
    }
    if (k === heap.length) {
      answer = Math.min(answer, qualitySum * r);
    }
  }
  return answer;
}