BackeasyArrays

Calculate Span of Numeric Sequence Solution

Problem Statement

You are provided with a linear sequence of integers representing a set of discrete measurements. Your task is to compute the total spread of this dataset, defined as the absolute difference between the maximum and minimum values contained within the sequence.

The input will be a single array of integers. You must identify the largest and smallest elements in the array and return the difference between them. If the array contains only one element, the span is zero, as the maximum and minimum values are identical.

This operation requires a single pass through the data to track the current extrema, ensuring an efficient solution suitable for large datasets.

Example 1
Input
nums = [4, 1, 9, 2, 7]
Output
8

Explanation: The minimum value in the array is 1 and the maximum value is 9. The span is calculated as |9 - 1| = 8.

Example 2
Input
nums = [-5, -1, -10, 3, 0]
Output
13

Explanation: The minimum value is -10 and the maximum value is 3. The span is calculated as |3 - (-10)| = |3 + 10| = 13.

Example 3
Input
nums = [7, 7, 7, 7]
Output
0

Explanation: All elements are identical. The minimum value is 7 and the maximum value is 7. The span is calculated as |7 - 7| = 0.

Example 4
Input
nums = [100]
Output
0

Explanation: The array contains a single element. The minimum and maximum are both 100. The span is calculated as |100 - 100| = 0.

Constraints

  • 1 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9
Live Compiler1 Free Run Available
Loading Editor...
Test Cases & Output
Click "Run" to test your 1 free compile trial!

🚀 Practice this problem

Run code, get AI hints & track streak

Sign Up Free

Calculate Span of Numeric Sequence — Problem Statement & Solution Guide

ArraysEasyBasic Traversal
TimeO(n)
|
SpaceO(1)

Problem Description

You are provided with a linear sequence of integers representing a set of discrete measurements. Your task is to compute the total spread of this dataset, defined as the absolute difference between the maximum and minimum values contained within the sequence.

The input will be a single array of integers. You must identify the largest and smallest elements in the array and return the difference between them. If the array contains only one element, the span is zero, as the maximum and minimum values are identical.

This operation requires a single pass through the data to track the current extrema, ensuring an efficient solution suitable for large datasets.

DSA Pattern Breakdown

DSA Pattern Breakdown

"Calculate Span of Numeric Sequence"

easy

WHY DOES IT MATTER?

The min‑max scan pattern is a foundational building block for many statistical and monitoring tasks, enabling constant‑space computation of extremal values in streams where storing the full dataset is infeasible.

OPTIMIZATION CHALLENGE

The key insight is that min and max are associative and can be updated independently; therefore, a single traversal suffices, eliminating the need for sorting or nested comparisons.

REAL-WORLD CONNECTION

Think of a temperature sensor network that continuously streams readings to a central server. The server must report the day's high and low without retaining every reading, mirroring the min‑max scan in a distributed monitoring system.

During an interview, write the initialization clearly, handle the empty‑array edge case early, and keep the loop body minimal—just two conditional updates—to demonstrate clean, efficient code.

COMPLEXITY AT A GLANCE

⏱ Time:O(n)
💾 Space:O(1)

Core Theory — Why This Approach?

The problem of finding the spread of a numeric sequence reduces to determining the global minimum and maximum values in a one‑dimensional array. In algorithmic terms, this is a classic reduction to two aggregate operations that can be performed in a single linear scan, leveraging the fact that each element contributes independently to the min and max. A naive solution might sort the array first, which incurs O(n log n) time and unnecessary space, or use nested loops to compare each pair, leading to O(n²) time—both impractical for large inputs where n can be in the millions.

The optimal paradigm is a single-pass, constant‑space scan. By initializing min and max with the first element and updating them as we iterate, we guarantee that each element is examined exactly once. This approach exploits the associative property of the min and max functions and aligns with the "scan" pattern common in streaming algorithms, where you cannot afford to store the entire dataset.

Because the algorithm touches each element only once and uses only two scalar variables, its time complexity is O(n) and its auxiliary space is O(1). This makes it suitable for real‑time analytics, embedded systems, and any scenario where memory is at a premium.

Interview Questions on This Problem

Q1How would you compute the range (max‑min) of an unsorted integer array in a single pass, and why is this preferable to sorting?

Initialize two variables, min and max, with the first array element. Iterate through the array, updating min if the current element is smaller and max if it is larger. After the loop, return max - min. This runs in O(n) time and O(1) extra space, whereas sorting costs O(n log n) time and may require additional memory.

Q2If the array can contain up to 10⁷ elements, what considerations would you make regarding integer overflow when computing max - min?

Use a data type with a wider range (e.g., long long in C++/Java, int64 in Python) for min, max, and the final difference. Also, compute the difference after the scan to avoid intermediate overflow, and consider edge cases where max and min are at opposite ends of the integer range.

Q3Can you extend the single‑pass approach to compute both the range and the average of the array without extra passes?

Yes. In the same linear scan, maintain three variables: min, max, and a running sum (using a 64‑bit type). After the loop, compute range = max - min and average = sum / n. This still runs in O(n) time and O(1) space.

Examples

Example 1

Input

nums = [4, 1, 9, 2, 7]

Output

8

Explanation: The minimum value in the array is 1 and the maximum value is 9. The span is calculated as |9 - 1| = 8.

Example 2

Input

nums = [-5, -1, -10, 3, 0]

Output

13

Explanation: The minimum value is -10 and the maximum value is 3. The span is calculated as |3 - (-10)| = |3 + 10| = 13.

Example 3

Input

nums = [7, 7, 7, 7]

Output

0

Explanation: All elements are identical. The minimum value is 7 and the maximum value is 7. The span is calculated as |7 - 7| = 0.

Example 4

Input

nums = [100]

Output

0

Explanation: The array contains a single element. The minimum and maximum are both 100. The span is calculated as |100 - 100| = 0.

Constraints

  • 1 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9

Optimal Approach & Strategy

The optimal solution scans the array once, updating two variables for min and max, achieving O(n) time and O(1) auxiliary space.

Brute Force Approach

A naive method would compare every pair of elements to find the global min and max, resulting in O(n²) time, or sort the array first, which costs O(n log n) time.

Verified Code Solutions

JavaScript Solution
Time: O(n)
function solution(nums) {
   if (nums.length === 0) return 0;
   let min = Math.min(...nums);
   let max = Math.max(...nums);
   return Math.abs(max - min);
}

Solve in Interative Editor

Ready to test your code? Open our built-in compiler, run custom test suites, and see detailed complexity analysis reports instantly.