Greedy Florist

  • + 0 comments

    My Java 8 solution, which passes all test cases, for max score of 35:

    Code is fairly simple & self-explanatory.

    Sort the Array + simple greedy approach after that.

        // Complete the getMinimumCost function below.
        static int getMinimumCost(int k, int[] c) {
            int minFlowerCost = 0;
    
            int numFriends = k;
            int numFlowers = c.length;
            
            Arrays.sort(c);
            
            List<Integer> friendNumFlowers = 
                IntStream.range(0, numFriends)
                    .mapToObj(i -> 0)
                    .collect(Collectors.toCollection(ArrayList::new));
    
            int friendIdx = 0;
            for (int cIdx = (numFlowers - 1) ; cIdx >= 0 ; cIdx--) {
                minFlowerCost += ((friendNumFlowers.get(friendIdx) + 1) * c[cIdx]);
                friendNumFlowers.set(friendIdx, (friendNumFlowers.get(friendIdx) + 1));
                friendIdx = ((friendIdx + 1) % numFriends);
            }
            
            return minFlowerCost;
        }