基本的思路我相信网上会给出答案
这个我相信所有人都能看明白,那么最后就是排序这里了,首先我用了冒泡,很显然直接超时
最后我用了堆排序一次就过了,所以有的时候必要的排序算法还是要学的。
vrr数组是用来记录下标的
public class Solution {
/**
* @param cost: The cost of each interviewer
* @return: The total cost of all the interviewers.
*/
public void swap(int arr[],int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public void heapFy(int arr[],int vrr[],int length,int i){
int max = i;
int left = 2*i+1;
int right = 2*i+2;
if(left<length && arr[left] > arr[max]){
max = left;
}
if(right<length && arr[right] > arr[max]){
max = right;
}
if(max!=i){
swap(arr, max, i);
swap(vrr, max, i);
heapFy(arr, vrr, length, max);
}
}
public int TotalCost(List<List<Integer>> cost) {
// write your code here
int p = 0;
int q = 0;
int[] arr = new int[cost.size()];
int[] vrr = new int[cost.size()];
for(int i = 0;i<cost.size();i++){
arr[p++] = cost.get(i).get(0) - cost.get(i).get(1);
vrr[q++] = i;
}
int k = p/2-1;
for(int i=k;i>=0;i--){
heapFy(arr, vrr, p, i);
}
int sum = 0;
for(int i=p-1;i>=p/2;i--){
swap(arr, i, 0);
swap(vrr, i, 0);
heapFy(arr, vrr, i, 0);
sum+= cost.get(vrr[i]).get(1);
}
for(int i = 0;i<p/2;i++){
sum+=cost.get(vrr[i]).get(0);
}
return sum;
}
}