707621. Count the number of subarrays

Hard

Count the number of subarrays

Slug: count-the-number-of-subarrays

Difficulty: Hard

Id: 707621

Topic Tags: sliding-window, Arrays, Data Structures, Algorithms

Company Tags: None

Summary

Given an array of integers, the task is to count the total number of subarrays in it. A subarray is a contiguous segment of elements from the original array.

This problem requires understanding of dynamic programming and sliding window concepts.

Detailed Explanation

To solve this problem, we can use a sliding window approach with dynamic programming. Initialize two pointers, start and end, to 0. Start iterating through the array from left to right. For each element, calculate the number of subarrays ending at that position by considering all possible subarrays that can be formed using elements up to that point.

The key insight is that for any given element, we can reuse previously calculated results for subarrays ending at earlier positions. This allows us to avoid redundant calculations and optimize the solution.

Here's a step-by-step breakdown of the algorithm:

  1. Initialize start and end pointers to 0.
  2. Iterate through the array from left to right.
  3. For each element, calculate the number of subarrays ending at that position by considering all possible subarrays that can be formed using elements up to that point.
  4. Use previously calculated results for subarrays ending at earlier positions to avoid redundant calculations.
  5. Update the end pointer based on the current calculation.

Time complexity: O(n^2), where n is the length of the array, because we're iterating through the array and calculating the number of subarrays for each element. Space complexity: O(1), because we're using a constant amount of space to store the pointers and intermediate results.

Optimized Solutions

Java

View on GeeksforGeeks
public int countSubarrays(int[] arr) {
    int n = arr.length;
    int start = 0, end = 0;
    int totalSubarrays = 0;

    for (int i = 1; i < n; i++) {
        if (arr[i] != arr[end]) {
            start = end + 1;
            end = i;
            totalSubarrays += (end - start + 1) * (n - end);
        } else {
            end++;
            totalSubarrays += (end - start + 1) * (n - end);
        }
    }

    return totalSubarrays;
}

DevExCode

Master coding interviews with Leetcode, system design, TechBit, QuickLearn, DevTips, Tech Battles, and career services.

© 2026 DevExCode. All rights reserved.