首页 > 其他 > 详细

BST: when to use i <= j or i < j

时间:2016-01-21 00:11:06      阅读:246      评论:0      收藏:0      [点我收藏+]

i <= j

  • BST for target
  public int search(int[] nums, int target) {

    int i=0, j=nums.length-1;
    while (i <= j) {
      int mid = i+(j-i)/2;
      if (nums[mid] == target) {
        return mid;
        } else if (nums[mid] < target) {

        i = mid + 1;
      } else {
        j = mid - 1;
      }
    }
    return -1;
  }

 

  • BST for insertion index of target. If target is not found, return its insertion place to make the array still sorted.

  

/* Invariant: intdex is in range [low, high+1]. */

    public int insertIndex(int[] nums, int target) {
      int lo = 0, hi = nums.length-1;
      while (lo <= hi) {
        int mid = lo+(hi-lo)/2;
        if (nums[mid] < target) {
          lo = mid + 1;
        } else {
          hi = mid - 1;
        }
      }
      return lo;
    }

 

i < j 

public int mySqrt(int x) {
        if (x<=1) return x;
        int left = 1, right = x;
        while (left < right) { // In this case, when left = right, left*left always bigger than x. 
            int mid = left+(right-left)/2;
            if (mid <= x/mid) { // to avoid integer overflow.
                left = mid+1;
            } else  {
                right = mid;
            } 
        }
        return left-1;
       
}

In this case, i <= j may lead to infinite loop.

  

BST: when to use i <= j or i < j

原文:http://www.cnblogs.com/touchdown/p/5146825.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!