[LeetCode] 702. Search in a Sorted Array of Unknown Size

在未知大小的有序数组中搜索。题干即是题意,给一个有序数组但是不告知数组长度,请找一个target数字。例子,

Example 1:

Input: array = [-1,0,3,5,9,12], target = 9
Output: 4
Explanation: 9 exists in nums and its index is 4

Example 2:

Input: array = [-1,0,3,5,9,12], target = 2
Output: -1
Explanation: 2 does not exist in nums so return -1

思路是用二分法。先设一个变量high,因为不确定input数组的长度所以只能每次乘以二去试探high位置上的数字和target数字的大小关系。

时间O(logn)

空间O(1)

JS实现

 1 /**
 2  * @param {ArrayReader} reader
 3  * @param {number} target
 4  * @return {number}
 5  */
 6 var search = function (reader, target) {
 7     let hi = 1;
 8     while (reader.get(hi) < target) {
 9         hi = hi << 1;
10     }
11     let low = hi >> 1;
12     while (low <= hi) {
13         let mid = Math.floor(low + (hi - low) / 2);
14         if (reader.get(mid) > target) {
15             hi = mid - 1;
16         } else if (reader.get(mid) < target) {
17             low = mid + 1;
18         } else {
19             return mid;
20         }
21     }
22     return -1;
23 };

Java实现

 1 class Solution {
 2     public int search(ArrayReader reader, int target) {
 3         int hi = 1;
 4         while (reader.get(hi) < target) {
 5             hi = hi << 1;
 6         }
 7         int low = hi >> 1;
 8         while (low <= hi) {
 9             int mid = low + (hi - low) / 2;
10             if (reader.get(mid) > target) {
11                 hi = mid - 1;
12             } else if (reader.get(mid) < target) {
13                 low = mid + 1;
14             } else {
15                 return mid;
16             }
17         }
18         return -1;
19     }
20 }

猜你喜欢

转载自www.cnblogs.com/aaronliu1991/p/12442836.html