仍然是二分法专栏系列
现在的问题是在不知道sorted array大小的情况下得知是否含有target元素
接口是 ArrayReader: reader.get(index)
如果超出界限 则返回 Integer.MAX_VALUE;
思路:1.首先找到比target大的右边界限 或者是已经越界的界限
2.在left , right 界限中间使用二分法进行查找
public int search(ArrayReader reader, int target) { //Corner case if(reader==null){ return -1; } int left=0; int right=1; while(reader.get(right)!=Integer.MAX_VALUE && reader.get(right)<target){ left=right; right=right*2; } return binarySearch(reader,target,left,right); } private int binarySearch(ArrayReader reader,int target,int left,int right){ while(left<=right){ int mid=left+(right-left)/2; if(reader.get(mid)==Integer.MAX_VALUE || reader.get(mid)>target){ right=mid-1; }else if(reader.get(mid)<target){ left=mid+1; }else{ return mid; } } return -1; }
原文地址:https://www.cnblogs.com/brooksli/p/10854573.html
时间: 2024-10-16 21:47:24