给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
代码如下:
public int searchInsert(int[] nums, int target) {
int n = nums.length;
int index = 0;
if (target > nums[n - 1]) {
return n;
}
for (int i = 0; i <= n - 1; i++) {
if (nums[i] == target) {
index = i;
break;
}
if (target > nums[i] && target < nums[i + 1]) {
index = i + 1;
break;
}
}
return index;
}
代码讲解:
定义变量 n 并赋值为数组 nums 的长度,表示数组的大小。
定义变量 index 并初始化为 0,用于记录目标值的索引位置或插入位置。
首先检查目标值是否大于数组中最后一个元素 nums[n-1],如果是,则说明目标值应该插入到数组末尾,直接返回数组的长度 n。
使用 for 循环遍历数组,从前往后进行比较:
如果当前元素 nums[i] 等于目标值,将 index 设置为当前索引 i。
如果目标值大于当前元素 nums[i],且小于下一个元素 nums[i+1],则目标值应该插入到当前元素之后,将 index
设置为当前索引 i+1。 注意循环条件为 i <= n - 1,以确保在遍历到最后一个元素时仍然可以执行判断。
循环结束后,将 index 返回作为结果。
代码如下:
public int searchInsert(int[] nums, int target) {
int n = nums.length;
int left = 0, right = n - 1, ans = n;
while (left <= right) {
int mid = ((right - left) >> 1) + left;
if (target <= nums[mid]) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
}
代码讲解: