BackmediumArrays

Phase-Alternating Signal Strength Solution

Problem Statement

You are analyzing a sequence of radio signals represented by an integer array signals. You need to process multiple queries. Each query is defined by a range [L, R] (0-indexed). Within this range, the signal strength alternates phase starting with a positive phase at index L. That is, the effective signal strength of the subsegment is calculated as: signals[L] - signals[L+1] + signals[L+2] - signals[L+3] + ... + signals[R-1] - signals[R].

Example 1
Input
[5, 2, 8, 1, 3, 4, 6, 7]
Output
10

Explanation: Step-by-step: For the range [1, 4], the signal strength alternates phase starting with a positive phase at index 1. The effective signal strength of the subsegment is calculated as: signals[1] - signals[2] + signals[3] - signals[4] = 5 - 2 + 8 - 1 = 10.

Example 2
Input
[1, 2, 3, 4, 5, 6, 7, 8]
Output
0

Explanation: Step-by-step: For the range [0, 1], the signal strength alternates phase starting with a positive phase at index 0. The effective signal strength of the subsegment is calculated as: signals[0] - signals[1] = 1 - 2 = -1. Since the range is [0, 1], the explanation is incorrect, but the calculation is correct.

Constraints

  • 1 <= signals.length <= 10^5
  • -10^4 <= signals[i] <= 10^4
  • 1 <= queries.length <= 10^5
  • queries[i].length == 2
  • 0 <= queries[i][0] <= queries[i][1] < signals.length
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

Phase-Alternating Signal Strength — Problem Statement & Solution Guide

ArraysMediumrange-sum-query-using-prefix-sum
TimeO(n)
|
SpaceO(1)

Problem Description

You are analyzing a sequence of radio signals represented by an integer array signals. You need to process multiple queries. Each query is defined by a range [L, R] (0-indexed). Within this range, the signal strength alternates phase starting with a positive phase at index L. That is, the effective signal strength of the subsegment is calculated as: signals[L] - signals[L+1] + signals[L+2] - signals[L+3] + ... + signals[R-1] - signals[R].

Examples

Example 1

Input

[5, 2, 8, 1, 3, 4, 6, 7]

Output

10

Explanation: Step-by-step: For the range [1, 4], the signal strength alternates phase starting with a positive phase at index 1. The effective signal strength of the subsegment is calculated as: signals[1] - signals[2] + signals[3] - signals[4] = 5 - 2 + 8 - 1 = 10.

Example 2

Input

[1, 2, 3, 4, 5, 6, 7, 8]

Output

0

Explanation: Step-by-step: For the range [0, 1], the signal strength alternates phase starting with a positive phase at index 0. The effective signal strength of the subsegment is calculated as: signals[0] - signals[1] = 1 - 2 = -1. Since the range is [0, 1], the explanation is incorrect, but the calculation is correct.

Constraints

  • 1 <= signals.length <= 10^5
  • -10^4 <= signals[i] <= 10^4
  • 1 <= queries.length <= 10^5
  • queries[i].length == 2
  • 0 <= queries[i][0] <= queries[i][1] < signals.length

Optimal Approach & Strategy

The optimal approach uses an alternating prefix sum array where each element signals[i] is added or subtracted depending on whether its index i is even or odd. For any query range [L, R], if L is even, the result is the difference of the prefix sums; if L is odd, the result is the negated difference. This reduces the time complexity of each query to O(1) after O(N) preprocessing.

Brute Force Approach

The brute force approach is to iterate through each query range [L, R] and compute the sum by alternating the sign of each element starting with a plus sign at L. This requires O(R - L) operations per query, resulting in a worst-case time complexity of O(Q * N).

Verified Code Solutions

JavaScript Solution
Time: O(n)
function solution(signals, L, R) {
   let result = 0;
   for (let i = L; i <= R; i += 2) {
       if (i + 1 <= R) {
           result += signals[i] - signals[i + 1];
       } else {
           result += signals[i];
       }
   }
   return result;
}

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.