LeetCode 702. Search in a Sorted Array of Unknown Size

仍然是二分法专栏系列

现在的问题是在不知道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

LeetCode 702. Search in a Sorted Array of Unknown Size的相关文章

[LeetCode] Search in a Sorted Array of Unknown Size 在未知大小的有序数组中搜索

Given an integer array sorted in ascending order, write a function to search target in nums.  If target exists, then return its index, otherwise return -1. However, the array size is unknown to you. You may only access the array using an ArrayReader 

Java for LeetCode 081 Search in Rotated Sorted Array II

Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this affect the run-time complexity? How and why? Write a function to determine if a given target is in the array. 解题思路: 参考Java for LeetCode 033 Search in Rota

LeetCode Solutions : Search in Rotated Sorted Array II

Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this affect the run-time complexity? How and why? Write a function to determine if a given target is in the array. Java Solution ( refer to my blog LeetCode So

[LeetCode] 033. Search in Rotated Sorted Array (Hard) (C++)

索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 033. Search in Rotated Sorted Array (Hard) 链接: 题目:https://leetcode.com/problems/search-in-rotated-sorted-array/ 代码(github):https://github.com/illuz/leetcode 题

LeetCode 33 Search in Rotated Sorted Array [binary search] &lt;c++&gt;

LeetCode 33 Search in Rotated Sorted Array [binary search] <c++> 给出排序好的一维无重复元素的数组,随机取一个位置断开,把前半部分接到后半部分后面,得到一个新数组,在新数组中查找给定数的下标,如果没有,返回-1.时间复杂度限制\(O(log_2n)\) C++ 我的想法是先找到数组中最大值的位置.然后以此位置将数组一分为二,然后在左右两部分分别寻找target. 二分寻找最大值的时候,因为左半部分的数一定大于nums[l],所以n

[Lintcode]62. Search in Rotated Sorted Array/[Leetcode]33. Search in Rotated Sorted Array

[Lintcode]62. Search in Rotated Sorted Array/[Leetcode]33. Search in Rotated Sorted Array 本题难度: Medium/Medium Topic: Binary Search Description Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you beforehand. (

LeetCode 33. Search in Rotated Sorted Array(在旋转有序序列中搜索)

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return its index, otherwise return -1. You

【leetcode】Search in Rotated Sorted Array II

Search in Rotated Sorted Array II Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this affect the run-time complexity? How and why? Write a function to determine if a given target is in the array. 与I类似,只是在二分搜

【leetcode】Search in Rotated Sorted Array

Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return its index, otherwise retu