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
Understanding the Visualization
1
Input
Array with one element larger than others: [5,5,8,5,5]
2
Process
Use compareSub API to compare subarray sums
3
Output
Return index 2 where the large integer 8 is located
Key Takeaway
🎯 Key Insight: Use binary search with sum comparisons to efficiently locate the large element without direct array access
💡
Explanation
AI Ready
💡 Suggestion
Tab
to accept
Esc
to dismiss
// Output will appear here after running code