来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position
题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
思路
为了降低复杂度,我们使用二分法解决:
- 当target等于首个元素或最后一个元素时,直接返回结果;
- 当curr元素<=target时,则target位于右区间,将start往前移动到curr+1的位置,反之,将end移动到curr的位置;
- 当start>=end时,start即为结果。
代码
public int searchInsert(int[] nums, int target) {
int start = 0;
int end = nums.length - 1;
if (target <= nums[start]) {
return 0;
}
if (target > nums[end]) {
return end + 1;
}
while (start < end) {
int curr = (start + end) / 2;
if (nums[curr] < target) {
start = curr + 1;
} else {
end = curr;
}
}
return start;
}
网友评论