Find the Index of the Large Integer - Problem
We have an integer array arr, where all the integers in arr are equal except for one integer which is larger than the rest of the integers.
You will not be given direct access to the array, instead, you will have an API ArrayReader which have the following functions:
int compareSub(int l, int r, int x, int y): where0 <= l, r, x, y < ArrayReader.length(),l <= randx <= y. The function compares the sum of sub-arrayarr[l..r]with the sum of the sub-arrayarr[x..y]and returns:- 1 if
arr[l]+arr[l+1]+...+arr[r] > arr[x]+arr[x+1]+...+arr[y] - 0 if
arr[l]+arr[l+1]+...+arr[r] == arr[x]+arr[x+1]+...+arr[y] - -1 if
arr[l]+arr[l+1]+...+arr[r] < arr[x]+arr[x+1]+...+arr[y]
- 1 if
int length(): Returns the size of the array.
You are allowed to call compareSub() 20 times at most. You can assume both functions work in O(1) time.
Return the index of the array arr which has the largest integer.
Input & Output
Example 1 — Basic Case
$
Input:
arr = [5,5,8,5,5]
›
Output:
2
💡 Note:
The large integer 8 is at index 2. We can find it by comparing sums of subarrays.
Example 2 — Large at Start
$
Input:
arr = [10,3,3,3]
›
Output:
0
💡 Note:
The large integer 10 is at index 0. Binary search will narrow down to this position.
Example 3 — Large at End
$
Input:
arr = [2,2,2,7]
›
Output:
3
💡 Note:
The large integer 7 is at index 3. Right half will have larger sum in first comparison.
Constraints
- 2 ≤ arr.length ≤ 5 * 105
- 1 ≤ arr[i] ≤ 106
- It is guaranteed that there is exactly one large integer in arr
- You are allowed to call compareSub() at most 20 times
Visualization
Tap to expand
💡
Explanation
AI Ready
💡 Suggestion
Tab
to accept
Esc
to dismiss
// Output will appear here after running code