[LintCode] 447 Search in a Big Sorted Array
Description
Given a big sorted array with positive integers sorted by ascending 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.
Notice
If you accessed an inaccessible index (outside of the array), ArrayReader.get will return 2,147,483,647.
4/23/2017
算法班
注意题目要求是返回第一个index
1 public int searchBigSortedArray(ArrayReader reader, int target) { 2 // ArrayReader.get(k); 3 int startIndex = 0; 4 while (reader.get(startIndex) < target) { 5 startIndex *= 2; 6 } 7 int start = startIndex / 2, end = startIndex; 8 9 while (start + 1 < end) { 10 int mid = start + (end - start) / 2; 11 if (reader.get(mid) >= target) { 12 end = mid; 13 } else { 14 start = mid; 15 } 16 } 17 if (reader.get(start) == target) return start; 18 if (reader.get(end) == target) return end; 19 return -1; 20 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步