Make Array Elements Equal to Zero

Easy
Watch on YouTube ↗

Solution

/*Simulation Approach */
class Solution {
    public int countValidSelections(int[] nums) {
        
        int count = 0;

        for(int i=0; i<nums.length; i++) {
            if(nums[i]==0 && isValid(i, nums,0)) {
                count++;
            }
            if(nums[i]==0 && isValid(i, nums, 1)) {
                count++;
            }
        }
        return count;

    }

    private boolean isValid(int curr, int inp[], int dir) {
        int[] nums = Arrays.copyOf(inp, inp.length);

        while(curr >=0 && curr<nums.length) {
            if(nums[curr]==0) {
                curr = dir==0 ? curr-1 : curr+1;
            }
            else {
                nums[curr]--;
                dir = dir==0? 1 : 0;
                curr = dir==0 ? curr-1 : curr+1;
            }
        }

        for(int num : nums) {
            if(num!=0)
                return false;
        }
        return true;

    }
}

/*Prefix Sum Approach */
class Solution {
    public int countValidSelections(int[] nums) {
        int ans = 0;
        int sum = 0;

        for(int num : nums ){
            sum +=  num;
        }

        int leftsum = 0;

        for(int i=0; i<nums.length; i++) {
            leftsum += nums[i];

            if(nums[i]==0) {
                if(leftsum==(sum-leftsum)) {
                    ans += 2;
                }
                else if(Math.abs(leftsum-(sum-leftsum))==1) {
                    ans +=1;
                }
            }
        }
        return ans;

        
    }
}















/*

 - Array elements are either 0 or more than 0
Valid selection ?
 nums[i] = 0
 direction - left or right
*/