package com.interview.flag.f;
import com.interview.utils.ConsoleWriter;
import java.util.Arrays;
import java.util.Comparator;
/**
* Created_By: stefanie
* Date: 15-1-9
* Time: 上午8:29
*/
public class F9_SalaryBalancer {
public int[] balance(final int[] current, int[] base){
int available = 0;
final Integer[] idxs = new Integer[current.length];
for(int i = 0; i < current.length; i++){
available += current[i] - base[i];
current[i] = base[i];
idxs[i] = i;
}
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return current[o1] - current[o2];
}
};
Arrays.sort(idxs, comparator);
int everyone = current[0];
for(int i = 1; i < idxs.length; i++){
if(current[idxs[i]] == current[idxs[i - 1]]) continue;
int count = i;
int diff = current[idxs[i]] - current[idxs[i - 1]];
if(available >= count * diff){
everyone = current[idxs[i]];
available -= count * diff;
} else {
everyone += available / count;
int rest = count - available % count;
for(int j = 0; j < count; j++){
current[idxs[j]] = everyone + (j >= rest? 1 : 0);
}
break;
}
}
return current;
}
public static void main(String[] args){
F9_SalaryBalancer balancer = new F9_SalaryBalancer();
int[] current = new int[]{20, 40, 33, 130, 90, 50, 110}; //110
int[] base = new int[]{10, 30, 10, 100, 50, 50, 100};
int[] salary = balancer.balance(current, base);
ConsoleWriter.printIntArray(salary); //54, 55, 54, 100, 55, 55, 100,
}
}