给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
解法一
暴力破解
class Solution {
public int searchInsert(int[] nums, int target) {
//暴力破解
//target小于数组的所有元素
if (target < nums[0]) return 0;
//target大于数组的所有元素
if (target > nums[nums.length-1]) return nums.length;
int index = -1;
for (int i = 0; i < nums.length; i++) {
//target在数组中间
if (nums[i] == target) {
index = i;
break;
}
//target不在数组中
if (i > 0 && nums[i-1] < target && nums[i] > target) {
index = i;
break;
}
}
return index;
}
}
解法二
二分查找
class Solution {
public int searchInsert(int[] nums, int target) {
//二分查找
int left = 0, right = nums.length -1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (target == nums[mid]) {
return mid;
} else if (target < nums[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return left;
}
}