博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
702. Search in a Sorted Array of Unknown Size
阅读量:2351 次
发布时间:2019-05-10

本文共 2295 字,大约阅读时间需要 7 分钟。

Given a big sorted array with non-negative integers sorted by non-decreasing order. The array is so big so that you can not get the length of the whole array directly, and you can only access the kth number by ArrayReader.get(k) (or ArrayReader->get(k) for C++).

Find the first index of a target number. Your algorithm should be in O(log k), where k is the first index of the target number.

Return -1, if the number doesn’t exist in the array.

Example 1:

Input: [1, 3, 6, 9, 21, …], target = 3

Output: 1

Example 2:

Input: [1, 3, 6, 9, 21, …], target = 4

Output: -1

我的想法

没有尾巴的二分法。。。。。不知道该怎么做

解答

**jiuzhang solution 1: 倍乘法 **

/** * Definition of ArrayReader: *  * public class ArrayReader { * public int get(int index) { *          // return the number on given index,  *          // return 2147483647 if the index is invalid. *     } * }; */public class Solution {
public int searchBigSortedArray(ArrayReader reader, int target) {
int firstElem = reader.get(0); if(firstElem == target) {
return 0; } if(firstElem > target) {
return -1; } //multiplication int idx = 0; int jump = 1; while(jump != 0) {
//be careful! it's '>='. don't forget '=' while(jump != 0 && reader.get(idx + jump) >= target) {
jump /= 2; } idx += jump; jump *= 2; } if(reader.get(idx + 1) == target) {
return idx + 1; } return -1; }}

jiuzhang solution 2: 二分法

通过倍乘法找到一个边界,再进行二分

public class Solution {
public int searchBigSortedArray(ArrayReader reader, int target) {
//to find the boundary int start = 0, end = 1; while(reader.get(end) <= target) {
end *= 2; } //binary search while(start + 1 < end) {
int mid = start + (end - start) / 2; if(reader.get(mid) < target) {
start = mid + 1; } if(reader.get(mid) >= target) {
end = mid; } } if(reader.get(start) == target) {
return start; } if(reader.get(end) == target) {
return end; } return -1; }}

转载地址:http://qkqvb.baihongyu.com/

你可能感兴趣的文章
Gradle Build速度加快终极方法
查看>>
Could not find class 'com.umeng.analytics.d' 解决的方案分享
查看>>
谷歌游览器模拟手机请求网站测试
查看>>
在Fragment中OnActivityResult方法中接收Activity中返回的值
查看>>
外包采用Gradle生成多套app打包
查看>>
iOS和Android的app界面设计规范
查看>>
Android 代码混淆异常
查看>>
Android drawable微技巧,你所不知道的drawable的那些细节
查看>>
理解Fragment生命周期
查看>>
最靠谱的禁止ViewPager滑动方法
查看>>
android错误之android.content.res.Resources$NotFoundException:
查看>>
Android监听软键盘打开收起事件(软键盘自带收起按钮)
查看>>
huffman code and encode
查看>>
exception in c++
查看>>
java并发编程lock
查看>>
阿里云技术教程系列-ECS远程连接 Linux 实例
查看>>
Linux新建用户并允许docker
查看>>
Drools Workbench 7.5.0.Final安装运行
查看>>
Docker快速部署Redis
查看>>
Spring boot shiro session cache ecache redis 共存配置
查看>>