Hacker Rank LARGEST AREA Question
Anonymous User
1464

Please Make changes to code so that the test is Passedimage
image
image

public class LargestArea {
    public static List<Long> getMaxArea(int w, int h, List<Boolean>isVertical, List<Integer>distance) {
        List<Long> maxAreas = new ArrayList<>();

        List<Integer> verticalLines = new ArrayList<>();
        verticalLines.add(0); verticalLines.add(w);
        List<Integer> horizontalLines = new ArrayList<>();
        horizontalLines.add(0); horizontalLines.add(h);

        int noOfLines = isVertical.size();

        int maxHeight = h;
        int maxWidth = w;

        for (int i=0; i<noOfLines; i++) {
            if (isVertical.get(i)) {
                insert(verticalLines, distance.get(i));
                maxWidth = findMaxDistance(verticalLines);
            } else {
                insert(horizontalLines, distance.get(i));
                maxHeight = findMaxDistance(horizontalLines);
            }
            Long area = ((long) maxHeight * maxWidth);
            maxAreas.add(area);
        }

        return maxAreas;
    }

    private static int findMaxDistance(List<Integer> lines) {
        int maxDistance = Integer.MIN_VALUE;
        int i = lines.size()-1;
        while (i > 0) {
            maxDistance = Math.max(maxDistance, lines.get(i) - lines.get(i-1));
            i--;
        }
        return maxDistance;
    }

    private static void insert(List<Integer> lines, Integer value) {
        lines.add(value);
        int i = lines.size()-1;
        while (i > 0 && lines.get(i-1) > lines.get(i)) {
            Integer temp = lines.get(i-1);
            lines.set(i-1, lines.get(i));
            lines.set(i, temp);
            i--;
        }
    }

    public static void main(String[] args) {
        System.out.println(getMaxArea(4,4, Arrays.asList(false,true),Arrays.asList(3,1)));//12 9
        System.out.println(getMaxArea(2,2,Arrays.asList(false,true),Arrays.asList(1,1)));//2 1
        System.out.println(getMaxArea(4,3,Arrays.asList(true,true),Arrays.asList(1,3)));//9 6
    }
}
Comments (0)