leetcode LeetBook 数组和字符串35. 搜索插入位置
我的思路
- 直接查询
首先判断第 0 个数,如果 target 小于等于这个数,那就把它插入在第 0 位上。
之后从 i=1 开始遍历,如果 target 小于这个数但是大于前一个数,那就插入在这个位置上。
遍历结束后如果都没有插入数,那么说明这个数需要插入到数组的末尾,即为 nums.length 位置上。
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function (nums, target) {
if (nums[0] >= target) {
return 0;
}
for (let i = 1; i < nums.length; i++) {
if (nums[i] >= target && (nums[i - 1] ? target > nums[i - 1] : null)) {
return i;
}
}
return nums.length;
};
其他解法
- 二分查找
二分查找中有很多坑,必须细心细心再细心才行。这里参考了写对二分查找不能靠模板,需要理解加练习 (附练习题,持续更新),如果二分查找不熟悉,可以看看,做做后面附加的题。
var searchInsert = function (nums, target) {
let left = 0;
let right = nums.length;
if (nums[right - 1] < target) {
return right;
}
while (left < right) {
let mid = Math.floor((left + right) / 2);
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
};
总结
查询问题除了按顺序遍历还可以考虑二分查找。