LintCode - 搜索插入位置(普通)

版权声明:本文为博主原创文章,未经博主允许不得转载。

难度:容易
要求:

给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。
你可以假设在数组中无重复元素。

样例
[1,3,5,6],5 → 2
[1,3,5,6],2 → 1
[1,3,5,6],7 → 4
[1,3,5,6],0 → 0

思路

    /** 
     * param A : an integer sorted array
     * param target :  an integer to be inserted
     * return : an integer
     */
    public int searchInsert(int[] A, int target) {
        if(A == null || A.length == 0){
            return 0;
        }
        int index = binarySearch(A, 0, A.length - 1, target);
        if(index < 0){
            for(int i = 0; i < A.length; i++){
                if(target < A[i]){
                    index = i;
                    break;
                }else if(i == A.length - 1){
                    index = i++;
                }
            }
        }
        return index;
    }
    
    public int binarySearch(int[] A,int left, int right, int target) {
        while(left < right){
            int mid = left + (right - left) / 2;
            if(target == A[mid]){
                right = mid;
            }else if(target < A[mid]){
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        }
        if(target == A[left]){
            return left;
        }
        return -1;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容