leetcode 之搜索插入位置

leetcode 之搜索插入位置

思路

见代码注释

代码

    public int searchInsert(int[] nums, int target) {
        /*
            二分查找
                跳出条件
                1.找到了
                2. 确认没找到
                    end-start<=1
                    =0 肯定没找到了
                    =1 情况,可能 num[start] nums[end] =target
         */
        int start=0;
        int end=nums.length-1;
        //单独剔除 target一定不在数组内的情况
        if(target<nums[start]){
            return 0;
        }
        if(target>nums[end]){
            return end+1;
        }
        int middle=(start+end)/2;
        while(end-start>1){
            if(nums[middle]>target){
                end=middle;
            }else if(nums[middle]<target){
                start=middle;
            }else{
                return middle;
            }
            middle=(end+start)/2;
        }
        //循环结束,最后一次,有可能考虑漏掉  start end 位 也可以 ==target
        if(nums[start]==target){
            return start;
        }
        if(nums[end]==target){
            return  end;
        }
        //前后都不等 ,中间也不等,肯定在middle 前或者后了
        return nums[middle]>target?middle-1:middle+1;
    }

提交结果

在这里插入图片描述

碰到的问题

  1. 测试用例 [1,3,4,5,6] 7
    边界情况没考虑到,单例考虑传入的数组不在有序数组范围内
  2. 测试用例[1,3] 2
    初始化 middle=nums.length/2 导致结果不准确
    修改位 middle=(end+start)/2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章