菜鸡每日一题系列打卡35天
每天一道算法题目
小伙伴们一起留言打卡
坚持就是胜利,我们一起努力!
题目描述(引自LeetCode)
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。
示例 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) throw new IllegalArgumentException();
// 二分搜索
int start = 0, end = nums.length - 1;
while (start <= end) {
int mid = start + ((end - start) >> 1);
if (nums[mid] == target) return mid;
if (nums[mid] > target) end = mid - 1;
else start = mid + 1;
}
return start;
}
}
代码分析
对代码进行分析,对数组进行二分搜索的时间复杂度为O(logn),空间复杂度为O(1)。
执行结果
学习 | 工作 | 分享
????长按关注“有理想的菜鸡”
只有你想不到,没有你学不到