Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0
代码:
解法一:
public class Solution {
public int searchInsert(int[] nums, int target) {
// 解法一
int i;
for(i = 0; i < nums.length; i++){
if(nums[i] < target) continue;// 如果数组中对应的数据小于target,继续学习
return i;// 如果等于target或者第一个大于target,则返回当前索引值
}
return i; // 如果循环中未能找到大于target,则插入数组的最后
}解法二:(二分查找)
(递归)
public class Solution {
public int searchInsert(int[] nums, int target) {
//解法二
if(nums.length == 0 || nums == null) return 0;
return binSearchInsert(nums, target, 0, nums.length - 1);
}
public int binSearchInsert(int[] nums, int target, int start, int end){
int mid = start + (end - start) / 2;
if(target < nums[mid]){
return (start < mid) ? binSearchInsert(nums, target, start, mid - 1) : mid;// 如果start == mid,
}
if(target > nums[mid]){
return end > mid ? binSearchInsert(nums, target, mid + 1, end) : mid+1;//
}
return mid;// 如果相等就返回此值
}
}(循环)public class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0, right = nums.length - 1;
int mid;
while(left <= <span style="font-family: Arial, Helvetica, sans-serif;">right</span>){
mid = left + (right - l) / 2;
if(target == nums[mid]) return mid;
if(target < nums[mid]){
right = mid - 1;
}
if(target > nums[mid]){
left = mid + 1;
}
}
return left;
}
}
本文探讨了在已排序数组中查找目标值及其插入位置的高效算法,包括两种方法:循环遍历和二分查找(递归与循环实现)。重点介绍了如何利用有序数组的特性优化搜索过程。

1084

被折叠的 条评论
为什么被折叠?



