Arcesium | Senior Software Engineer | OA
Anonymous User
876

Question 1:


Solution:

static int maxLength(List<Integer> arr) {
        int n = arr.size();
        int ans = 0;
        int i = 0;

        while (i < n) {
            while (i < n && arr.get(i) == 0) {
                i++;
            }

            int start = i;
            int negCount = 0;
            int firstNeg = -1;
            int lastNeg = -1;

            while (i < n && arr.get(i) != 0) {
                if (arr.get(i) < 0) {
                    negCount++;
                    if (firstNeg == -1) {
                        firstNeg = i;
                    }
                    lastNeg = i;
                    }
                i++;
            }
            if (negCount % 2 == 0) {
                ans = Math.max(ans, i - start);
            } else {
                if (firstNeg != -1) {
                    ans = Math.max(ans, i - firstNeg - 1);
                }
                if (lastNeg != -1) {
                    ans = Math.max(ans, lastNeg - start);
                }
            }
            i++;
        }

        return ans;
    }

Question 2:



Solution:

static int minimumPouringWaterPenalty(List<Integer> parent, List<Integer> waterLevel, int overhydratedPenalty, int underhydratedPenalty) {
        Map <Integer, List<Integer>> map = new HashMap<Integer,List<Integer>>();
        for(int i = 0; i < parent.size(); i++){
            map.putIfAbsent(parent.get(i), new ArrayList<>());
            map.get(parent.get(i)).add(i);
        }
        int [][] waterL = new int [parent.size()][2];
        for(int [] arr : waterL){
            Arrays.fill(arr,-1);
        }
        dfs(0,waterL,waterLevel,map);
        int ifNoWater =  waterL[0][1]*underhydratedPenalty;
        int globalMin = Integer.MAX_VALUE;
        for(int i = 0; i < parent.size(); i++){
            int currMax = 0;
            globalMin = Math.min(globalMin,(ifNoWater - waterL[i][1]*underhydratedPenalty + waterL[i][0]*overhydratedPenalty));
        }
        return globalMin;
}

public static int[] dfs(int node, int [][] waterL, List<Integer> waterLevel, Map <Integer, List<Integer>> map){
    int [] total = new int[2];
    total[0] = 0;
    total[1] = 0;
    if(waterLevel.get(node) > 0){
        total[0] +=1;
    }
    else if(waterLevel.get(node) < 0){
        total[1] += 1;
    }
    if(waterL[node][0] != -1){
        return waterL[node];
    }
    if(map.get(node)!= null){
        for(int i : map.get(node)){
            int [] temp = dfs(i, waterL,waterLevel,map);
            total[0] += temp[0];
            total[1] += temp[1];
        }
    }
    waterL[node] = total;
    return total;
}

Question 3:

static int findMinDays(int n, int m) {
        int res = 0;
        while (n < m) {
            if ((m & 1) == 1) {
                m++;
            } else {
                m /= 2;
            }
            res++;
        }
        return res + (n - m);
    }
Comments (3)