之谜:
给定排序数组和目标值,如果找到目标,则返回索引。如果没有,请返回索引按顺序插入的索引。
您可以假设数组中没有重复项。
我的代码在这里:
public class Solution {
public static int searchInsert(int[] nums, int target) {
return searchInsert(nums, target, 0, nums.length-1);
}
private static int searchInsert(int[] nums, int target, int start, int end) {
if(start <= end) {
return target <= nums[start] ? start : (start+1);
}
int m = (start + end) / 2;
if(nums[m] == target) {
return m;
} else if(nums[m] < target) {
return searchInsert(nums, target, m+1, end);
} else {
return searchInsert(nums, target, start, m-1);
}
}
public static void main(String[] args) {
int[] nums = {1, 3};
System.out.print(searchInsert(nums, 4);
}
}
结果如下:
输入:
[1,3]
4
输出:
1
预期:
2
我在纸上一遍又一遍地模拟了这个输入的过程,但却无法弄清楚我的代码如何输出2
。
请提前帮助我。
答案 0 :(得分:1)
条件:
start <= end
不正确。对于非零长度数组,条件立即成立,因为start == 0
和end == <something which is at least 0>
,因此它会立即返回start
或start+1
- 在您的情况下,{ {1}}。