二分法查找算法模板:

1. mid不在左边边界上就在右边边界上

2. 当有个边界时mid-1时,则为了防止死循需要在计算mid时+1;

版本1
当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。

更新操作为什么是r = mid 或者是l = mid +1呢?因为划分为[l, mid]和[mid+1, r]后,我们要保留的区间肯定在这两个区间中的一个, 要么保留[l, mid],此时 r 更新成了mid; 要么保留的是[mid+1, r], 此时l更新成了mid+1;

版本2
当我们将区间[l, r]划分成[l, mid - 1]和[mid, r]时,其更新操作是r = mid - 1或者l = mid;,此时为了防止死循环,计算mid时需要加1。

通用类:

1 //Definition for TreeNode
2 public class ListNode {
3     int val;
4     ListNode next = null;
5 
6     ListNode(int val) {
7         this.val = val;
8     }
9 }
ListNode

相关文章: