leetcode: Search Insert Position

来源:互联网 发布:淘宝发布定制产品 编辑:程序博客网 时间:2024/05/21 09:31

Search Insert Position

question:
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


solution 1:

    /*这个是我自己写出来的solution,代码相对较复杂,不建议采用。     * 采用该进二分法查找,终止条件是left>=right-1.     * 这样结束的时候有两个值供我们判断,这样做的最大的好处是不用处理各种越界问题     * @param A a sort array and no duplicates      * @param target target value     * @return the position     * */    public int searchInsertPosition(int []A,int target){        if(A==null || A.length==0)//A没有new或者数据为空            return 0;        int len = A.length;        int left=0;        int right=len-1;        int mid;        while (left < right-1) {            mid =left +(right-left)/2;            if(target == A[mid])//如果有相等的,就直接返回                return mid;            else if(target < A[mid])                right=mid;            else                left=mid;        }        if(target <= A[left])//只有left为0的情况            return 0;        else if(target > A[right])//比最大的还大            return len;        else//没有相等的,且小于A的最大值            return right;    }

solution 2:

    public int searchInsertPosition(int A[],int target){        if(A==null || A.length==0)//A没有new或者数据为空            return 0;        int left=0;        int right=A.length-1;        int mid=0;        while (left<right) {//直到left==right时候停止            mid=left+(right-left)/2;            if(target>A[mid])                //最后left+1=right时,mid+1=right                left=mid+1;//这里是和上边一个程序的核心不同点            else//target <= A[mid]                right=mid;        }        /*如果数组中有target,则left=right,且A[right]=target,return left         *如果数组中不存在target,则left=right,分两种清空         *1)target不大于A中最大值,即target<=A[left],且A[left]是上确界。return left         *2)target大于A中最大值,即target>A[left]。return left+1* */        return (target>A[left] ? left+1:left);    }
0 0
原创粉丝点击