BackeasyBinary SearchGoogleAmazon

Network Protocol Validator 7 Solution

Problem Statement

You are tasked with implementing a validation routine for a distributed network protocol. The system receives a sorted array of integer latency measurements, latencies, and a target threshold, target. Your goal is to determine the index of the first latency value that is strictly greater than target. This index represents the boundary where the protocol switches from a 'stable' state to a 'congested' state. If no such value exists, return -1. If all values are less than or equal to the target, return the length of the array. You must solve this using binary search to ensure O(log n) time complexity, as the dataset can be extremely large.

Example 1
Input
latencies = [1, 3, 5, 7, 9], target = 4
Output
2

Explanation: The array is sorted. We search for the first element > 4. Index 0 (1) <= 4. Index 1 (3) <= 4. Index 2 (5) > 4. Thus, the first index where the condition is met is 2.

Example 2
Input
latencies = [10, 20, 30, 40], target = 5
Output
0

Explanation: The first element, 10, is already greater than the target 5. Therefore, the index is 0.

Example 3
Input
latencies = [1, 2, 3, 4], target = 10
Output
-1

Explanation: All elements in the array are less than or equal to 10. There is no element strictly greater than the target. According to the problem statement, we return the length of the array, which is 4.

Example 4
Input
latencies = [5, 5, 5, 5], target = 5
Output
-1

Explanation: The condition is 'strictly greater than'. Since all elements are equal to 5, none are greater than 5. The boundary is at the end of the array, so we return the length, 4.

Constraints

  • 1 <= latencies.length <= 10^5
  • 1 <= latencies[i] <= 10^9
  • 1 <= target <= 10^9
  • latencies is sorted in non-decreasing order
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

Network Protocol Validator 7 — Problem Statement & Solution Guide

Binary SearchEasyDFS Traversal
TimeO(log n)
|
SpaceO(1)

Problem Description

You are tasked with implementing a validation routine for a distributed network protocol. The system receives a sorted array of integer latency measurements, latencies, and a target threshold, target. Your goal is to determine the index of the first latency value that is strictly greater than target. This index represents the boundary where the protocol switches from a 'stable' state to a 'congested' state. If no such value exists, return -1. If all values are less than or equal to the target, return the length of the array. You must solve this using binary search to ensure O(log n) time complexity, as the dataset can be extremely large.

DSA Pattern Breakdown

DSA Pattern Breakdown

"Network Protocol Validator 7"

easy

WHY DOES IT MATTER?

Finding the first greater element is a classic boundary‑search pattern used in range queries.

OPTIMIZATION CHALLENGE

The challenge is reducing a linear scan to logarithmic time by leveraging sorted order.

REAL-WORLD CONNECTION

It mirrors locating the cut‑off point where response times exceed SLA thresholds in monitoring dashboards.

Initialize low=0, high=n and use mid=(low+high)/2; move high=mid on >= and low=mid+1 otherwise.

COMPLEXITY AT A GLANCE

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

Core Theory — Why This Approach?

Binary search exploits the monotonic property of sorted arrays to eliminate half of the remaining candidates at each step, achieving logarithmic time. By repeatedly comparing the middle element with the target, we can decide whether the desired index lies to the left or right, converging on the first element strictly greater than the target.

A naive linear scan checks each element sequentially, which is O(n) and becomes prohibitive for large latency logs common in distributed systems. The optimal paradigm—upper bound binary search—maintains two pointers defining a search window and narrows it until the lower bound points to the smallest index where latency > target, guaranteeing O(log n) time with O(1) extra space.

Interview Questions on This Problem

Q1How does upper bound binary search differ from standard binary search for a value?

Upper bound seeks the first element greater than the target, not equality. It adjusts the high pointer on >= comparisons to ensure the final low index points to the correct boundary.

Q2What edge cases must be handled when implementing this search?

When all elements are ≤ target, the answer should be the array length (no greater element). When the first element itself is > target, the answer is index 0.

Q3Why is O(log n) preferable to O(n) in high‑throughput network monitoring?

Latency logs can contain millions of entries; O(log n) reduces query time from seconds to microseconds. This enables real‑time threshold alerts without overwhelming the system.

Examples

Example 1

Input

latencies = [1, 3, 5, 7, 9], target = 4

Output

2

Explanation: The array is sorted. We search for the first element > 4. Index 0 (1) <= 4. Index 1 (3) <= 4. Index 2 (5) > 4. Thus, the first index where the condition is met is 2.

Example 2

Input

latencies = [10, 20, 30, 40], target = 5

Output

0

Explanation: The first element, 10, is already greater than the target 5. Therefore, the index is 0.

Example 3

Input

latencies = [1, 2, 3, 4], target = 10

Output

-1

Explanation: All elements in the array are less than or equal to 10. There is no element strictly greater than the target. According to the problem statement, we return the length of the array, which is 4.

Example 4

Input

latencies = [5, 5, 5, 5], target = 5

Output

-1

Explanation: The condition is 'strictly greater than'. Since all elements are equal to 5, none are greater than 5. The boundary is at the end of the array, so we return the length, 4.

Constraints

  • 1 <= latencies.length <= 10^5
  • 1 <= latencies[i] <= 10^9
  • 1 <= target <= 10^9
  • latencies is sorted in non-decreasing order

Optimal Approach & Strategy

Perform an upper‑bound binary search: maintain low and high pointers, compute mid, and move high to mid when latencies[mid] > target, otherwise move low to mid+1.

Brute Force Approach

Iterate from the start of the array until you encounter a value > target and return its index.

Verified Code Solutions

JavaScript Solution
Time: O(log n)
function findFirstGreater(latencies, target) {
    let left = 0;
    let right = latencies.length - 1;
    let ans = -1;
    while (left <= right) {
        const mid = Math.floor((left + right) / 2);
        if (latencies[mid] > target) {
            ans = mid;
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    return ans;
}

Asked in Top Tech Interviews

GoogleAmazonMicrosoft

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.