Gauss' 10y-old formula at work

Gauss is one the most brilliant mathematicians to have ever lived. The formula for the summation that he discovered when he was only 10y old is used everyday today but hundreds of thousands of people, sometimes not even aware that they are using the formula discovered by a 10y old kid.

Problem below requires this formula. Count the number of consecutive zeroes (use a simple finite-state-machine technique) and then apply Gauss' formula. Watch out for overflows (use long instead of int). Code is down below, cheers, ACC.

Number of Zero-Filled Subarrays - LeetCode

2348. Number of Zero-Filled Subarrays
Medium

Given an integer array nums, return the number of subarrays filled with 0.

subarray is a contiguous non-empty sequence of elements within an array.

 

Example 1:

Input: nums = [1,3,0,0,2,0,0,4]
Output: 6
Explanation: 
There are 4 occurrences of [0] as a subarray.
There are 2 occurrences of [0,0] as a subarray.
There is no occurrence of a subarray with a size more than 2 filled with 0. Therefore, we return 6.

Example 2:

Input: nums = [0,0,0,2,0,0]
Output: 9
Explanation:
There are 5 occurrences of [0] as a subarray.
There are 3 occurrences of [0,0] as a subarray.
There is 1 occurrence of [0,0,0] as a subarray.
There is no occurrence of a subarray with a size more than 3 filled with 0. Therefore, we return 9.

Example 3:

Input: nums = [2,10,2019]
Output: 0
Explanation: There is no subarray filled with 0. Therefore, we return 0.

 

Constraints:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109
Accepted
11,218
Submissions
21,065

public long ZeroFilledSubarray(int[] nums)
{
    bool withinZeroArray = false;
    long countZero = 0;
    long retVal = 0;

    for (int i = 0; i < nums.Length; i++)
    {
        if (nums[i] == 0)
        {
            withinZeroArray = true;
            countZero++;

            if (i == nums.Length - 1)
            {
                retVal += (countZero * (countZero + 1)) / 2; //Gauss at 10y old!
            }
        }
        else if (withinZeroArray)
        {
            retVal += (countZero * (countZero + 1)) / 2; //Gauss at 10y old!
            countZero = 0;
            withinZeroArray = false;
        }
    }

    return retVal;
}

Comments

Popular posts from this blog

Changing the root of a binary tree

ProjectEuler Problem 719 (some hints, but no spoilers)

Hard Leetcode Problem: Grid Illumination