Leetcode/Java学习笔记

二分法

2018-09-13  本文已影响0人  萧瑟空间

本文仅为作者自学之用,系统为macOS,不保证信息准确。
用题型来分的话,二分法可以简单分为两种:

  1. 对于一个没有重复的有序数列,需要用二分法找到某一个数的准确位置;
int start = 0;
int end = nums.length;
while(start <= end){
  mid = start + (end - start)/2;
  if(nums[mid]==target){
    return mid;
  }
  if(nums[mid] > target){
    end = mid - 1;
  }
  if(nums[mid] < target){
    start = mid + 1;
  }
}
return start;

这个时候的start的位置满足以下条件:

为什么start是这个结果呢?需要自己穷举各种不同的输入来看,发现输出都满足同一种结论

2.对于一个有重复的有序数列,用二分法寻找第一个大于等于target的数的位置;

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

这个程序返回的是第一个大于等于target的数的位置。

上一篇 下一篇

猜你喜欢

热点阅读