Search - Minimum Time Required

For example, you have to produce  items. You have three machines that take  days to produce an item. The following is a schedule of items produced:

Day Production  Count
2   2               2
3   1               3
4   2               5
6   3               8
8   2              10

It takes  days to produce  items using these machines.

Code:

import java.io.*;

import java.math.*;

import java.security.*;

import java.text.*;

import java.util.*;

import java.util.concurrent.*;

import java.util.regex.*;


public class Solution {


    // [Start]  Complete the minTime function below.

    static long minTime(long[] machines, long goal) {

      Arrays.sort(machines);

        long max = machines[machines.length - 1];

        long minDays = 0;

        long maxDays = max*goal;

        long result = -1;

        while (minDays < maxDays) {

            long mid = (minDays + maxDays) / 2;

            long unit = 0;

            for (long machine : machines) {

                unit += mid / machine;

            }

            if (unit < goal) {

                minDays = mid+1;

            } else {

                result = mid;

                maxDays = mid;

            }

        }

        return result;


    }

  // [end]  

    private static final Scanner scanner = new Scanner(System.in);


    public static void main(String[] args) throws IOException {

        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));


        String[] nGoal = scanner.nextLine().split(" ");


        int n = Integer.parseInt(nGoal[0]);


        long goal = Long.parseLong(nGoal[1]);


        long[] machines = new long[n];


        String[] machinesItems = scanner.nextLine().split(" ");

        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");


        for (int i = 0; i < n; i++) {

            long machinesItem = Long.parseLong(machinesItems[i]);

            machines[i] = machinesItem;

        }


        long ans = minTime(machines, goal);


        bufferedWriter.write(String.valueOf(ans));

        bufferedWriter.newLine();


        bufferedWriter.close();


        scanner.close();

    }

}


留言

這個網誌中的熱門文章

考績被打差了 輕率離職會更傷

Arrays - DS (Reverse array) [Easy]

WireMock