[关闭]
@w1024020103 2017-06-25T21:34:03.000000Z 字数 925 阅读 534

Search in a Big Sorted Array

LeetCode LintCode


在此输入正文

这道题还是属于二分法第二境界:
二分位置 之 OOXX

这里是在一个不知道size的big array里面找first index of a target number. 我最开始不知道要如何确定start和end, 视频里老师参考了java语言中ArrayList的resize,提出了倍增法。从index = 1开始,每次index * 2, 知道第 index 个数比target大,就可以把target 锁定在 index / 2 到index之间了。

  1. /**
  2. * Definition of ArrayReader:
  3. *
  4. * class ArrayReader {
  5. * // get the number at index, return -1 if index is less than zero.
  6. * public int get(int index);
  7. * }
  8. */
  9. public class Solution {
  10. /**
  11. * @param reader: An instance of ArrayReader.
  12. * @param target: An integer
  13. * @return : An integer which is the index of the target number
  14. */
  15. public int searchBigSortedArray(ArrayReader reader, int target){
  16. int index = 1;
  17. while (reader.get(index) < target) {
  18. index *= 2;
  19. }
  20. int start = index / 2;
  21. int end = index;
  22. while (start + 1 < end) {
  23. int mid = start + (end - start) / 2;
  24. if (reader.get(mid) < target){
  25. start = mid;
  26. } else{
  27. end = mid;
  28. }
  29. }
  30. if (reader.get(start) == target){
  31. return start;
  32. }else if (reader.get(end) == target){
  33. return end;
  34. }else {
  35. return -1;
  36. }
  37. }
  38. }

循环体结束后,只剩下三种可能, index = start的数是第一次出现target, index = end是第一次出现target, 没有target.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注