LeetCode 702. Search in a Sorted Array of Unknown Size
2021-01-27 16:49:56
# leetcode
Problem
LeetCode 702. Search in a Sorted Array of Unknown Size
1. 题目简述
题目不赘述了,具体点击链接查看。
2. 算法思路
这道题很有意思,数组的大小是未知的,因此,我们需要将其分解成两个子问题。第一,确定二分查找的子区间;第二,二分查找哦啊该区间。
首先,我们定义l = 0, r = 1,直到reader.get(l) <= target <= reader.get(r)。然后二分查找该区间。算法复杂度为O(logN)
/**
* // This is ArrayReader's API interface.
* // You should not implement it, or speculate about its implementation
* interface ArrayReader {
* public int get(int index) {}
* }
*/
class Solution {
public int search(ArrayReader reader, int target) {
if (reader.get(0) == target) {
return 0;
}
// 两个子问题,第一个是确认左右边界。这里left初始化为0,right初始化为1,然后每次get右边界。如果右边界<target,那么left=right + 1,right = right * 2。找到合适的区间后再想办法做二分。
int l = 0, r = 1;
while (reader.get(r) < target) {
l = r + 1;
r = r * 2;
}
// 此时,target一定是在[l,r]之间
while (l < r) {
int mid = l + r >> 1;
if (reader.get(mid) == target) {
return mid;
} else if (reader.get(mid) > target) {
r = mid - 1;
} else {
l = mid + 1;
}
}
if (reader.get(l) == target) {
return l;
}
return -1;
}
}