BackmediumArraysUber

Energy Grid Load Distribution Solution

Problem Statement

Given an energy grid of n power stations and k load adjustment operations, calculate the final output of each station and the prefix sum of the grid. The input consists of an array of integers representing the initial power output of each station and a 2D array of integers representing the load adjustment operations, where each operation is in the format [station_index, adjustment_value].

Example 1
Input
[1, 2, 3], [[0, 1], [1, 2], [2, 3]]
Output
[4, 5, 6], [4, 9, 15]

Explanation: Step-by-step: with input [1, 2, 3] and operations [[0, 1], [1, 2], [2, 3]], we add the corresponding operation values to the power stations, resulting in [4, 5, 6]. Then, we calculate the prefix sum of the grid, resulting in [4, 9, 15].

Example 2
Input
[10, 20, 30], [[0, 5], [1, 10], [2, 15]]
Output
[15, 30, 45], [15, 45, 90]

Explanation: Step-by-step: with input [10, 20, 30] and operations [[0, 5], [1, 10], [2, 15]], we add the corresponding operation values to the power stations, resulting in [15, 30, 45]. Then, we calculate the prefix sum of the grid, resulting in [15, 45, 90].

Constraints

  • 1 <= n <= 10^5
  • 0 <= k <= 10^5
  • 0 <= start <= end < n
  • 1 <= boost <= 10^4
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

Energy Grid Load Distribution — Problem Statement & Solution Guide

ArraysMediumDifference Array
TimeO(n + k)
|
SpaceO(n)

Problem Description

Given an energy grid of n power stations and k load adjustment operations, calculate the final output of each station and the prefix sum of the grid. The input consists of an array of integers representing the initial power output of each station and a 2D array of integers representing the load adjustment operations, where each operation is in the format [station_index, adjustment_value].

DSA Pattern Breakdown

DSA Pattern Breakdown

"Energy Grid Load Distribution"

medium

WHY DOES IT MATTER?

The pattern of aggregating updates via a difference array is essential for any scenario where many modifications are applied to a static structure, because it converts repeated O(n) work into constant‑time bookkeeping, dramatically reducing runtime for large‑scale data.

OPTIMIZATION CHALLENGE

The key insight is to decouple the update phase from the query phase: store only the net delta per index, then perform a single linear sweep to materialize both the final outputs and their cumulative sums.

REAL-WORLD CONNECTION

Think of a power grid where each station receives scheduled load adjustments throughout the day; instead of re‑balancing the entire grid after each adjustment, operators log the net change per station and recompute the overall distribution once at the end of the day.

During an interview, write the delta array first, update it in O(1) per operation, and only then loop once to build the answer. This shows you understand lazy aggregation and avoids the temptation to recompute after each update.

COMPLEXITY AT A GLANCE

⏱ Time:O(n + k)
💾 Space:O(n)

Core Theory — Why This Approach?

The problem reduces to applying a series of additive updates to an array and then computing its prefix sums. A naïve implementation would iterate over the entire array for each operation, leading to O(n·k) time, which quickly becomes infeasible when n and k reach 10^5 or higher. The optimal paradigm leverages the fact that point updates can be accumulated in an auxiliary "delta" array in O(1) per operation, and a single linear pass can then materialize the final values and their cumulative prefix sums, achieving overall O(n + k) time. This approach exemplifies the broader technique of "difference arrays" or "prefix‑sum tricks" that transform repeated update‑query patterns into linear‑time solutions by deferring work until a final aggregation step.

Interview Questions on This Problem

Q1How would you modify the solution if each operation were a range update [l, r, val] instead of a single index?

Use a difference array: add val at index l and subtract val at r+1; after processing all k operations, compute the prefix sum of the difference array to obtain the final values, then another prefix pass for the required grid prefix sums. This still runs in O(n + k).

Q2Why is it safe to compute the prefix sum of the final array in a separate pass rather than after each update?

Because addition is associative and commutative; the order of applying independent additive updates does not affect the final result. Accumulating all updates first and then performing a single cumulative scan yields the same outcome as interleaving scans after each update, but with far lower computational cost.

Q3In a distributed system where stations are sharded across nodes, how could you compute the global prefix sum efficiently?

Each node computes the local final values and its local prefix sums, then performs an all‑reduce (or prefix‑sum) communication to propagate the total sum of all preceding shards. Each node adds this offset to its local prefix array, yielding the correct global prefix sums with O(log p) communication rounds for p nodes.

Examples

Example 1

Input

[1, 2, 3], [[0, 1], [1, 2], [2, 3]]

Output

[4, 5, 6], [4, 9, 15]

Explanation: Step-by-step: with input [1, 2, 3] and operations [[0, 1], [1, 2], [2, 3]], we add the corresponding operation values to the power stations, resulting in [4, 5, 6]. Then, we calculate the prefix sum of the grid, resulting in [4, 9, 15].

Example 2

Input

[10, 20, 30], [[0, 5], [1, 10], [2, 15]]

Output

[15, 30, 45], [15, 45, 90]

Explanation: Step-by-step: with input [10, 20, 30] and operations [[0, 5], [1, 10], [2, 15]], we add the corresponding operation values to the power stations, resulting in [15, 30, 45]. Then, we calculate the prefix sum of the grid, resulting in [15, 45, 90].

Constraints

  • 1 <= n <= 10^5
  • 0 <= k <= 10^5
  • 0 <= start <= end < n
  • 1 <= boost <= 10^4

Optimal Approach & Strategy

Store adjustments in a delta array, apply each in O(1), then perform a single linear scan to compute final values and their prefix sums, achieving O(n + k) time.

Brute Force Approach

For each adjustment, iterate over the entire array and add the value to the specified station, then recompute the prefix sum after every operation. This results in O(n·k) time.

Verified Code Solutions

JavaScript Solution
Time: O(n + k)
function solution(stations, operations) {
      for (let i = 0; i < operations.length; i++) {
         stations[operations[i][0]] += operations[i][1];
      }
      let prefixSum = [stations[0]];
      for (let i = 1; i < stations.length; i++) {
         prefixSum.push(prefixSum[i - 1] + stations[i]);
      }
      return [stations, prefixSum];
   }

Asked in Top Tech Interviews

Uber

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.