搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
1
2
2
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function(nums, target) {
for(i=0;i<nums.length;i++){ //在数组内找到目标值,或者若是没有目标值,就找到第一个大于目标值的
//数,并返回它的下标,就是目标值应该插入的位置。
if(nums[i]>=target){
return i
}
}
return nums.length //无目标值,并且应该插入到数组末尾时
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function(nums, target) {
if(nums.length < 1) return 0
if(nums[0]>=target) return 0
if(nums[nums.length - 1] < target) return nums.length
let l = 0
let r = nums.length - 1
let res
while(l <= r) {
let mid = (l + r) >> 1
// 关键是这步,小于等于的时候,位置就是当前mid
if(nums[mid] >= target) {
res = mid
r = mid - 1
}else {
l = mid + 1
}
}
return res
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/search-insert-position