查找数组的插入位置

题目:已知一个排序数组和一个目标值,如果目标值能够在数组中找到,返回目标值在数组的位置,如果不能找到,那么返回,数组插入这个数后,这个数的位置

例如:

 

[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;
    }

 

你可能感兴趣的:(查找数组的插入位置)