Award Budget Cuts implementation in Java
I believe that the problem in the first place is not well defined (or we are trying to solve a different problem). And I mean...

The problem states the following:


  write a function findGrantsCap that finds in the most efficient manner a cap such that the least number of recipients is impacted and that the new budget constraint is met


So it focuses on the recipients impacted and not on the amounts.

e.g 

Input:  grantsArray = [2, 100, 50, 120, 1000], newBudget = 190


If I pick for cap the 100 value the array becomes like this

Input:  grantsArray = [2, 100, 50, 1, 37], newBudget = 190


Now only 2 recipients affected (of course the sum of the array elements meets the newBudget constraint), but it's totally unfair.