Problem · Array

Subarray Removal

Learn this problem
HardThe D. E. Shaw Group logoThe D. E. Shaw GroupOA

Problem statement

Given an array arr of n integers, find the number of its subarrays such that removing the subarray creates a non-empty array that is sorted in increasing order.

Note: A subarray is defined as any contiguous segment of the array.

Function

getNumSubarrays(arr: int[]) → long

Examples

Example 1

arr = [1, 2, 1, 2]return = 7
Example 1 illustration

There are 7 subarrays that on removal produce a non-empty sorted array. Hence, the answer is 7.

The subarrays [3], [3, 1] and [1, 2] give a non-empty sorted array on removal.

Example 2

arr = [3, 1, 2]return = 3

The subarrays [3], [3, 1] and [1, 2] give a non-empty sorted array on removal.

Example 3

arr = [1, 2, 2, 6, 1, 3]return = 10

The subarrays [1, 2, 2, 6], [1, 2, 2, 6, 1], [2, 2, 6], [2, 2, 6, 1], [2, 6], [2, 6, 1], [6], [6, 1], [1, 3] and [1] give a non-empty sorted array on removal.

Constraints

  • 1 ≤ n ≤ 2×10^5
  • 1 ≤ arr[i] ≤ 10^9

More The D. E. Shaw Group problems

drafts saved locally
public long getNumSubarrays(int[] arr) {
  // write your code here
}
arr[1, 2, 1, 2]
expected7
checking account