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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章