leetcode

简单数组二分查找

278. 第一个错误的版本
704. 二分查找

方法1 暴力解法

  1. var searchInsert = function(nums, target) {
  2. for (let i = 0; i < nums.length; i++) {
  3. if (target <= nums[i]) return i;
  4. }
  5. return nums.length;
  6. };

image.png

从有序数组 nums 中查找第一个不小于 target 的成员,并返回其下标。
若 target 比所有成员都大,那么插入位置为 nums.target。

方法2 二分查找

  1. var searchInsert = function(nums, target) {
  2. const len = nums.length;
  3. // 处理特殊情况
  4. if (target > nums[len - 1]) return len;
  5. // 处理结果在 0 ~ nums.length - 1 的情况
  6. let l = 0, r = len - 1;
  7. while(l < r) {
  8. const mid = (r - l >> 1) + l;
  9. if (nums[mid] < target) l = mid + 1;
  10. else r = mid;
  11. }
  12. return r;
  13. };

image.png