import java.util.Arrays; public class FlowersCost { private int people; private int flowers; private int[] costs; public FlowersCost(int people, int flowers, int[] costs) { this.people = people; this.flowers = flowers; this.costs = flowers == 0 ? new int[0] : costs; } public int calculateMinCost() { int minCost = 0; int[] numberOfFlowers = new int[people]; final int[] sortedReverse = sortInReverse(); for (int i = 0; i < sortedReverse.length; i++) { int temp = i % people; minCost += (numberOfFlowers[temp] + 1) * sortedReverse[i]; numberOfFlowers[temp]++; } return minCost; } private int[] sortInReverse() { return Arrays.stream(costs). boxed(). sorted((a, b) -> b - a). mapToInt(i -> i). toArray(); } }