Minimum Time Required

  • + 0 comments

    My Java 8 solution, based on a simple Binary Search approach, passing all test cases, for Max Score of 35. Code is fairly self-explanatory.

        static long minTime(long[] machines, long goal) {
            Arrays.sort(machines);
            long fastestMachineNumDays = machines[0];
    
            // Binary search bounds
            long lowNumDays = 1;
            long highNumDays = fastestMachineNumDays * goal;
            long result = highNumDays;
            
            while (lowNumDays <= highNumDays) {
                long midNumDays = lowNumDays + (highNumDays - lowNumDays) / 2;
                // Compute production in 'midNumDays' days
                long total = 0;
                for (long m : machines) {
                    total += midNumDays / m;
                    if (total >= goal) {
                        break; // early exit if goal reached
                    }
                }
                if (total < goal) {
                    lowNumDays = midNumDays + 1;
                } else {
                    result = midNumDays;
                    highNumDays = midNumDays - 1;
                }
            }
            return result;
        }