今天这题做的快
题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
输入: nums = [1,3,5,6], target = 5
输出: 2
输入: nums = [1,3,5,6], target = 2
输出: 1
输入: nums = [1,3,5,6], target = 0
输出: 0
1.暴力题解:
/*
* @lc app=leetcode.cn id=35 lang=javascript
*
* [35] 搜索插入位置
*/
// @lc code=start
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function (nums, target) {
let len = nums.length;
for (let index = 0; index < nums.length; index++) {
const num = nums[index];
if (num >= target) {
return index;
} else {
if (index == len - 1) return index + 1;
}
}
};
// @lc code=end
2.二分查找法
数组是有序数组,这也是使用二分查找的基础条件。
以前算法课讲过 但是感觉解题思路简单但是写出来就是不会的所以这次;
目标值与中间值进行比较,如果目标值小于中间值,末尾(right)左移;反之,首位(left)右移;
/*
* @lc app=leetcode.cn id=35 lang=javascript
*
* [35] 搜索插入位置
*/
// @lc code=start
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function (nums, target) {
let left = 0,right = nums.length-1;
while(left <= right) {
let mid=((right-left)>>1)+left;
if(nums[mid]<target){
left=mid+1
}else{
right=mid-1
}
}
return left
};
// @lc code=end