2799. Count Complete Subarrays in an Array

Difficulty:
Related Topics:
Similar Questions:

Problem

You are given an array nums consisting of positive integers.

We call a subarray of an array complete if the following condition is satisfied:

Return **the number of *complete* subarrays**.

A subarray is a contiguous non-empty part of an array.

Example 1:

Input: nums = [1,3,1,2,2]
Output: 4
Explanation: The complete subarrays are the following: [1,3,1,2], [1,3,1,2,2], [3,1,2] and [3,1,2,2].

Example 2:

Input: nums = [5,5,5,5]
Output: 10
Explanation: The array consists only of the integer 5, so any subarray is complete. The number of subarrays that we can choose is 10.

Constraints:

Solution (Java)

class Solution {
    public int countCompleteSubarrays(int[] A) {
        Set<Integer> s = new HashSet<>();
        for (int a : A)
            s.add(a);
        int n = A.length, k = s.size(), res = 0, i = 0;
        Map<Integer, Integer> count = new HashMap<>();

        for (int j = 0; j < n; ++j) {
            if (count.getOrDefault(A[j], 0) == 0)
                k--;
            count.put(A[j], count.getOrDefault(A[j], 0) + 1);
            while (k == 0) {
                count.put(A[i], count.get(A[i]) - 1);
                if (count.get(A[i]) == 0)
                    k++;
                i++;
            }
            res += i;
        }
        return res;
    }
}

Explain:

nope.

Complexity: