第十天:力扣第35题,搜索插入位置
地址:leetcode-cn.com/problems/se…
思路:先用indexOf方法找位置,没有再找插入的位置。
var searchInsert = function(nums, target) {
return nums.indexOf(target)==-1?a(nums):nums.indexOf(target);//三目运算符,下面的是扩展
function a(nums){
let filterResult = nums.filter(function(item){
return (item < target);//这是数组filter的用法,返回重新创建一个符合的数组
});
return filterResult.length;
}
// a = nums.indexOf(target);
// if(a==-1)
// {
// let filterResult = nums.filter(function(item){
// return (item < target);
// });
// return filterResult.length;
// }
// else{
// return a;
// }
};
执行用时:80 ms, 在所有 JavaScript 提交中击败了81.09%的用户
内存消耗:39.2 MB, 在所有 JavaScript 提交中击败了5.01%的用户
唔,看了别人的代码,我想的复杂了,这个本来就是有序数组,直接找大小就行了。
找是否有个大于或者等于target的元素就行了:
const searchInsert = (nums, target) => {
for (let i = 0; i < nums.length; i++) {
if (target <= nums[i]) {
return i;
}
}
return nums.length;
};
还有一个是二分查找:
const searchInsert = (nums, target) => {
let lo = 0;
let hi = nums.length - 1;
while (lo <= hi) {
const mid = (lo + hi) >>> 1;//这个是无符号移位运算符
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
hi = mid - 1;
} else {
lo = mid + 1;
}
}
return lo; // 退出循环时 hi比lo小1
};