i <= j
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; }
/* 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