二分查找

搜索插入位置

简单#35Java时间 O(log n)空间 O(1)

题目要做什么

给定严格升序数组 nums 和目标值 target,返回目标值的下标;如果不存在,返回它保持升序时应插入的位置。

题目示例输入nums = [1, 3, 5, 6], target = 2
题目示例输出1

01 为什么这样做

使用左闭右开的区间 [left, right)。mid 的值小于 target 时,插入位置只能在右侧;否则保留 mid,并缩小右边界。区间为空时,left 就是插入位置。

始终成立的条件

插入位置始终位于 [left, right] 范围内。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class Solution {2    public int searchInsert(int[] nums, int target) {3        int left = 0, right = nums.length;4        while (left < right) {5            int mid = left + (right - left) / 2;6            if (nums[mid] < target) {7                left = mid + 1;8            } else {9                right = mid;10            }11        }12        return left;13    }14}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索