查找数组的插入位置

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

例如:

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值