Search in a Sorted Array of Unknown Size
Given an integer array sorted in ascending order, write a function to searchtargetinnums. Iftargetexists, then return its index, otherwise return-1.However, the array size is unknown to you. You may only access the array using anArrayReader interface, where ArrayReader.get(k)returns the element of the array at indexk (0-indexed).
You may assume all integers in the array are less than 10000, and if you access the array out of bounds,ArrayReader.getwill return2147483647.
Example 1:
Input:
array
= [-1,0,3,5,9,12],
target
= 9
Output:
4
Explanation:
9 exists in
nums
and its index is 4Example 2:
Input:
array
= [-1,0,3,5,9,12],
target
= 2
Output:
-1
Explanation:
2 does not exist in
nums
so return -1Note:
You may assume that all elements in the array are unique.
The value of each element in the array will be in the range
[-9999, 9999].
Analysis
隐含条件是数组下标index最大是Integer.MAX_VALUE,最简单的想法就是right设为Integer.MAX_VALUE,然后进行常规的Binary Search。
更好的方法是利用reader.get(hi) < target
这样保持了reader.get(hi) > target, reader.get(low) < target
Solution
Binary Search - Template #3 (end = Integer.MAX_VALUE) - (5 ms, faster than 17.24%)
Binary Search - Template #1 (hi = hi * 2 while val < target)
Last updated
Was this helpful?