Tuỳ vào invariant bạn muốn duy trì.
left <= right (closed interval [left, right]):
- Vùng tìm kiếm bao gồm cả left và right
- Khi không match: low = mid + 1 hoặc high = mid - 1
- Vòng dừng khi left > right (vùng rỗng)
- Phù hợp khi tìm exact match
left < right (half-open [left, right)):
- right là exclusive — không nhìn nums[right]
- Khi không match: low = mid + 1 hoặc high = mid (không phải mid-1)
- Vòng dừng khi left === right
- Phù hợp khi tìm insertion point hoặc lower bound
Mẹo: chọn 1 style và stick. Mix là nguyên nhân số 1 gây off-by-one. Đa số code samples dùng <= cho exact match.
- Depends on the invariant.
- Use
<=with closed interval [left, right] andmid±1updates for exact match. - Use
<with half-open [left, right) andhigh = midfor lower bound / insertion point. - Pick one style and stick to it.