题目要求:在一个有序的数组中,找到一个目标值,返回该值得下标。若没有找到该值,则返回该值顺序插入的下标
例如,
[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[] nums, int target) {
        int index=0;
        for( ; index<nums.length ; index++){
            if(nums[index]>=target){
                break;
            }
        }
        return index;
    }

使用双指针后效率比单指针效率高

    public int searchInsert2(int[] nums, int target) {
        int pointerLeft = 0;
        int pointerRight = nums.length-1;
        for( ; pointerLeft<=pointerRight ; pointerLeft++, pointerRight--){
            if(nums[pointerLeft]>=target){
                return pointerLeft;
            }
            if(nums[pointerRight]<target){
                return pointerRight+1;
            }
        }
        return pointerLeft;
    }

使用二分法也可以,但是二分法可能会在数组有重复数字情况下产生多个答案

    public int searchInsert3(int[] nums, int target) {
        int pointerLeft = 0;
        int pointerRight = nums.length-1;
        while(pointerLeft<=pointerRight){
            int mid = (pointerLeft+pointerRight)/2;
            if(nums[mid]==target){
                return mid;
            }else if(nums[mid]>target){
                pointerRight = mid-1;
            }else{
                pointerLeft = mid+1;
            }
        }
        return pointerLeft;
    }

clipboard.png
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~


raledong
2.7k 声望2k 粉丝

心怀远方,负重前行