作者主页: 进朱者赤的博客
精选专栏: 经典算法
作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名)
❤️觉得文章还不错的话欢迎大家点赞➕收藏⭐️➕评论,支持博主,记得点个大大的
关注
,持续更新
————————————————-———————————————-————————
给定一个排序数组和一个目标值,在数组中找到目标值,如果找不到则返回可以将其插入的位置以保证数组仍然有序。
你可以假设数组中无重复元素。
示例 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
原题:力扣 35. 搜索插入位置
题目要求在一个有序数组中查找目标值,如果找不到则返回可以将其插入的位置以保证数组仍然有序。由于数组是有序的,所以我们可以使用二分查找算法来优化搜索过程。
二分查找的基本思路是,每次取数组的中间元素与目标值进行比较:
在二分查找的过程中,我们可以同时记录可以插入目标值的位置。如果目标值大于中间元素,说明目标值应该插入在右半部分的起始位置,这个位置正好是中间元素的下一个位置;如果目标值小于中间元素,说明目标值应该插入在左半部分的末尾位置,这个位置正好是中间元素的位置。
public class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
// 退出循环时,left > right,left 的位置就是可以插入 target 的位置
return left;
}
}