# 2462. Total Cost to Hire K Workers ###### tags: `Leetcode` `Medium` `Two Pointers` `Priority Queue` Link: https://leetcode.com/problems/total-cost-to-hire-k-workers/description/ ## 思路 priority queue里面放目前所有的candidates 并且记录他们是从哪边读到的 ```l```和```r```分别表示目前从左(右)边已经读到了第```l```(```r```)个元素 如果pop出来的元素是从左边读到的 就多放一个左边的元素在pq里 挪动l指针 从右边读到则同理 ## Code ```java= class Solution { public long totalCost(int[] costs, int k, int c) { long ans = 0; int n = costs.length; Queue<int[]> pq = new PriorityQueue<>((a,b)->(a[0]==b[0]?(a[1]-b[1]):(a[0]-b[0]))); int l=0, r=n-1; for(l=0; l<c; l++){ pq.add(new int[]{costs[l], l, 0}); } l-=1; for(r=n-1; n-r<=c && l<r; r--){ pq.add(new int[]{costs[r], r, 1}); } r+=1; for(int i=0; i<k; i++){ int[] curr = pq.poll(); ans += curr[0]; if(curr[2]==0 && l<r-1) pq.add(new int[]{costs[++l], l, 0}); else if(curr[2]==1 && l<r-1) pq.add(new int[]{costs[--r], r, 1}); } return ans; } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up