Variation of the longest increasing subsequence algorithm

This problem requires a solution similar to the longest increasing subsequence one. Basically on each step you either reset the current streak or increments it, adding the value to the return value. Code is down below, cheers, ACC.


3101. Count Alternating Subarrays
Medium

You are given a binary array nums.

We call a subarray alternating if no two adjacent elements in the subarray have the same value.

Return the number of alternating subarrays in nums.

 

Example 1:

Input: nums = [0,1,1,1]

Output: 5

Explanation:

The following subarrays are alternating: [0][1][1][1], and [0,1].

Example 2:

Input: nums = [1,0,1,0]

Output: 10

Explanation:

Every subarray of the array is alternating. There are 10 possible subarrays that we can choose.

 

Constraints:

  • 1 <= nums.length <= 105
  • nums[i] is either 0 or 1.
Accepted
26,802
Submissions
47,966

public long CountAlternatingSubarrays(int[] nums)
{
    long retVal = 0;

    int currentStreak = 0;
    for (int i = 0; i < nums.Length; i++)
    {
        currentStreak = (i == 0 || nums[i] == nums[i - 1]) ? 1 : currentStreak + 1;
        retVal += currentStreak;
    }

    return retVal;
}

Comments

Popular posts from this blog

Changing the root of a binary tree

ProjectEuler Problem 719 (some hints, but no spoilers)

The Power Sum, a recursive problem by HackerRank