خرید بک لینک

Vote count: 0

Today while solving this question on HackerRank I used Array stream .sum() function to sum all the entries and proceeded with my algorithm. But for sum reason I found that my algorithm fails for some cases. I used diff to find out it passes 99% cases and for 1% the output is nearly equal but is less than the original answer. That's why I replaced the stream .sum() with a for loop and unexpectedly it passed all the test cases. I tried but couldn't ascertain this uncertain behaviour.

My implementation using stream.sum() :

public class MandragoraForest {

    public static void main(String[] args) {
        InputReader in = new InputReader(System.in);
        for (int i = in.nextInt(); i > 0; i--) {
            int number = in.nextInt();
            int[] h = new int[number];
            for (int j = 0; j < number; j++) h[j] = in.nextInt();
            System.out.println(new MandragoraForestSolver().solve(h));
        }
    }
}

class MandragoraForestSolver {

    public long solve(int[] h) {
        if (h.length==1) retu h[0];
        Arrays.parallelSort(h);
        long sum = Arrays.stream(h)
                .sum();
        long ans = -1;

        for (long i=0, strength = 2; i<h.length; i++, strength++) {
            sum -= h[(int)i];
            ans = Math.max(ans, strength * sum);
        }
        retu ans;
    }
}

Implementation without Java stream :

public class MandragoraForest {

    public static void main(String[] args) {
        InputReader in = new InputReader(System.in);
        for (int i = in.nextInt(); i > 0; i--) {
            int number = in.nextInt();
            int[] h = new int[number];
            long sum = 0;
            for (int j = 0; j < number; j++) {
                h[j] = in.nextInt();
                sum += h[j];
            }
            System.out.println(new MandragoraForestSolver().solve(h, sum));
        }
    }
}

class MandragoraForestSolver {

    public long solve(int[] h, long sum) {
        if (h.length==1) retu h[0];
        Arrays.parallelSort(h);


        long ans = -1;

        for (long i=0, strength = 2; i<h.length; i++, strength++) {
            sum -= h[(int)i];
            ans = Math.max(ans, strength * sum);
        }
        retu ans;
    }
}

asked 16 secs ago

برچسب: نویسنده: استخدام کار تاريخ: شنبه 19 تير 1395 ساعت: 23:43

صفحه بندی