题目:已知一个排序数组和一个目标值,如果目标值能够在数组中找到,返回目标值在数组的位置,如果不能找到,那么返回,数组插入这个数后,这个数的位置
例如:
[1,3,5,6]
, 5 → 2[1,3,5,6]
, 2 → 1[1,3,5,6]
, 7 → 4[1,3,5,6]
, 0 → 0
解题,使用二分法查找位置,这样比较快,其实一个个去找也行,就是速度比较慢
public int searchInsert(int[] A, int target) {
if(A.length==0)
return 0;
int lengt=A.length;
int left=0;
int right=lengt-1;
while(left<right){
int temp=(left+right)/2; // 找打中间值
if(A[temp]==target)
return temp;
if(A[temp]>target)
right=temp-1;
else
left=temp+1;
}
if(A[left]>=target)
//判断当前值是否在left的那侧,在左面的话,代替left,在右面的话,需要加1;等号是防止数组只有一个,并且等于target,如【1】,1
return left;
return left+1;
}