题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为O(log n)
的算法。
你可以假设数组中无重复元素。
示例1:
1 | 输入: [1,3,5,6], 5 |
示例2:
1 | 输入: [1,3,5,6], 2 |
示例3:
1 | 输入: [1,3,5,6], 7 |
示例4:
1 | 输入: [1,3,5,6], 0 |
提示:
- 1 <= nums.length <= 10^4
- -10^4 <= nums[i] <= 10^4
- nums 为 无重复元素 的 升序 排列数组
- -10^4 <= target <= 10^4
解法
解法一:
Java
暴力破解。因为数组是有序的,直接遍历一趟数组,找到对应的插入位置。如果初始位置的值比target大,返回0.如果数组最后一个元素比target大,返回数组长度。
但时间复杂度不符合要求
1 | public int searchInsert(int[] nums, int target) { |
解法二:
二分查找。因为数组已经排序,所以可以通过二分搜索来找到target需要插入的位置。因为数组元素不重复,所以不用考虑相同元素的场景。
1 | public int searchInsert(int[] nums, int target) { |