LeetCode 702. 搜索長度未知的有序數組(二分查找)

文章目錄

1. 題目

給定一個升序整數數組,寫一個函數搜索 nums 中數字 target。
若是 target 存在,返回它的下標,不然返回 -1。注意,這個數組的大小是未知的。
你只能夠經過 ArrayReader 接口訪問這個數組,ArrayReader.get(k) 返回數組中第 k 個元素(下標從 0 開始)。

數組

你能夠認爲數組中全部的整數都小於 10000。
若是你訪問數組越界,ArrayReader.get 會返回 2147483647。
網絡

樣例 1:
輸入: array = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 存在在 nums 中,下標爲 4

樣例 2:
輸入: array = [-1,0,3,5,9,12], target = 2
輸出: -1
解釋: 2 不在數組中因此返回 -1
 
註釋 :
你能夠認爲數組中全部元素的值互不相同。
數組元素的值域是 [-9999, 9999]

來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/search-in-a-sorted-array-of-unknown-size
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。

函數

2. 解題

/** * // This is the ArrayReader's API interface. * // You should not implement it, or speculate about its implementation * class ArrayReader { * public: * int get(int index); * }; */

class Solution {
public:
    int search(const ArrayReader& reader, int target) {
    	if(target>=10000 || target <= -10000)
    		return -1;
        int l = 0, r = INT_MAX, mid, val;
        while(l <= r)
        {
        	mid = l+((r-l)>>1);
        	val = reader.get(mid);
        	if(val > target)
        		r = mid-1;
        	else if(val < target)
        		l = mid+1;
        	else
        		return mid;
        }
        return -1;
    }
};

44 ms 10.1 MB學習


長按或掃碼關注個人公衆號,一塊兒加油、一塊兒學習進步!
Michael阿明
spa

相關文章
相關標籤/搜索