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學習
長按或掃碼關注個人公衆號,一塊兒加油、一塊兒學習進步!
spa