先刷到的35,涉及到二分查找。于是把704也做一遍。
704_二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
提示:
你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-search
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function (nums, target) {
//左边界
var left = 0;
//右边界
var right = nums.length - 1;
//中间索引
var flag = 0;
//循环 只要左小于等于右说明没有查找完成。
while (left <= right) {
//修改flag
flag = parseInt(left + (right - left) / 2);
//如果target == 数组中间索引位置的值则 直接返回flag
//如果target < 数组中间索引位置的值则 右边界就等于中间索引左移一位的位置
//如果target > 数组中间索引位置的值则 左边界就等于中间索引右移一位的位置
if (target == nums[flag]) return flag;
if (target < nums[flag]) {
right = flag - 1;
} else if (target > nums[flag]) {
left = flag + 1;
}
}
//如果循环结束则 没有 查找到直接返回-1
return -1;
};
35_搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
示例 2:
输入: [1,3,5,6], 2
输出: 1
示例 3:
输入: [1,3,5,6], 7
输出: 4
示例 4:
输入: [1,3,5,6], 0
输出: 0
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法一
简单粗暴的解法。
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function (nums, target) {
//循环数组
for (let i = 0; i < nums.length; i++) {
//如果当前循环位置的数大于等于目标数
//则可以证明无论插入还是查询到,目标位置都为当前索引直接返回
if (nums[i] >= target) {
return i;
}
}
return nums.length;
};
方法二
二分法 时间复杂度O(logn)
区别在于,如果没有搜索到就直接返回左边界下标就ok
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function (nums, target) {
var left = 0;
var right = nums.length - 1;
var flag = 0;
while (left <= right) {
flag = parseInt(left + (right - left) / 2);
if (target == nums[flag]) return flag;
if (target < nums[flag]) {
right = flag - 1;
} else if (target > nums[flag]) {
left = flag + 1;
}
}
return left;
};
0 条评论