题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
思路:这题很简单,先用二分法找值,找到返回即可。没找到的情况共有三种,1是target比最小的要小,此时右箭头==-1。2是target比最大的还要大,此时左箭头==n。最后就是target在某两个数之间,此时索引在右箭头与左箭头之间。当然这样做的前提是没重复,有重复就要多考虑一下了。
代码如下:
class Solution {
public int searchInsert(int[] nums, int target) {
int n= nums.length;
int low=0;
int high=n-1;
int mid=0;
while(low<=high)
{
mid=(low+high)/2;
if(nums[mid]==target)
{
return mid;
}
else if(nums[mid]>target)
{
high=mid-1;
}
else
{
low=mid+1;
}
}
if(high==-1)
{
return 0;
}
else if(low==n)
{
return n;
}
else{
return high+1;
}
}
}
提交结果:
结论:简单题确实简单,使用二分法查数没找到数的三种结果可以记一下。