【LeetCode】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
题解
暴力匹配
/* 暴力匹配 */
class Solution {
public int searchInsert(int[] nums, int target) {
if(nums == null || nums.length == 0){
return 0;
}
//考虑边界情况
if(target < nums[0]){
return 0;
}
if(target == nums[nums.length -1]){
return nums.length-1;
}
if (target > nums[nums.length - 1]) { //正序,判断最后一位数是否比目标值小
return nums.length; //如果大,直接返回数组长度
}
int index = 0;
for (int i = 0; i < nums.length-1; i++) {
if(nums[i] == target){
return i;
}
if ((nums[i] < target && nums[i+1] > target)) { //相邻的两个数比较
return i+1;
}
}
return index;
}
}
二分查找
class Solution {
public int searchInsert(int[] nums, int target) {
// 不需要额外考虑数组为空的情况,因为此时low(0)<=low(-1)不成立,直接返回0
int low = 0, high = nums.length - 1, mid = 0;
while(low <= high) {
mid = (low + high) >> 1;
if(nums[mid] == target)
return mid;
else if(nums[mid] > target)
high = mid - 1;
else
low = mid + 1;
}
return low;
}
}
精选题解
踩坑
实验室一兄弟使用js提交,但是遇到了这样的问题
将let mid = (hi + lo) >> 1;
改为let mid = (hi + lo) / 2;
结果不通过
let mid = (hi + lo) >> 1;
let mid = (hi + lo) / 2;
请路过的大佬,能不能解决?欢迎评论/私信我!!!
💥 一个正在学习全栈的 💥
⭐ 精神小伙 ⭐
💥 MelodyJerry 💥