Related Topics:[Array][Binary Search]
Similar Questions:[First Bad Version]
题目: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
思路
思路1:遍历一遍原数组,若当前数字大于或等于目标值,则返回当前坐标,如果遍历结束了,说明目标值比数组中任何一个数都要大,则返回数组长度n即可;
java解法1:
class Solution {
public int searchInsert(int[] nums, int target) {
//遍历法
for(int i=0;i<nums.length;i++) {
if(nums[i]>=target) return i;
}
return nums.length;
}
}
思路2:我们还可以用二分搜索法来优化我们的时间复杂度,
java解法2:
class Solution {
public int searchInsert(int[] nums, int target) {
//二分法
int left=0,right=nums.length-1;
//此处有=,则返回left;此处无=,返回right,且要判断数组最后一位与target的大小
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 left;
}
}