
自己解法
有序数组就是二分查找的依据,二分查找完了以后,能找到target直接返回,不能找到的话,就是left和right中较小的值加1,其实取两者中较大的值,就是插入的位置了。
class Solution {
public int searchInsert(int[] nums, int target) {
if (nums.length == 0) {
return 0;
}
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return Math.max(left, right) ;
}
}
官方解法
思路一致,不过最后的比较不用再比较了,不管是left=mid + 1,或者right = mid - 1都是left较大。
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while(left <= right) {
int mid = (left + right) / 2;
if(nums[mid] == target) {
return mid;
} else if(nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return left;
}
}
网友评论