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
Given an integer array nums
, return the number of subarrays filled with 0
.
A 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
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
Post a Comment