LeetCode-Java题解 35. Search Insert Position

题目地址:35.Search Insert Position

解题思路:一看到题目的关键字有序不重复整数,第一时间想到二分查找
这道题是将二分查找进行了拓展,如果target不存在数组内,还需要进一步判断target的插入位置,
target存在数组内的情况就不考虑了,与704. Binary Search并无二致。
下面就考虑,元素不存在需要插入的情况。利用数组内元素有序的特性,首先考虑最简单的三种情况:

  1. 插入元素为最小元素
  2. 插入元素为最大元素
  3. 插入空数组
    然后除了在找到相同的数返回的情况后,和纯二分查找相比,在每次不相等比较后多一个位置记录。
    注意此处位置记录的差异,与比较的数相比,比他小就需要把当前元素后移一位,然后插入到他原来的位置,所以不用+1。
class Solution {
    public int searchInsert(int[] nums, int target) {
        int low=0;
        int high=nums.length-1;
        int insertLocation=high;
        if (nums.length==0)
        {
            return 0;
        }
        if (target<nums[0])
        {
            return 0;
        }
        if (target>nums[nums.length-1])
        {
            return nums.length;
        }
            while(low<=high)
            {
                int mid = (low + high)/2;
                if(nums[mid]==target)
                {
                    return mid;
                }else if(nums[mid]>target)
                {
                    high=mid-1;
                    insertLocation = high+1;
                }else if(nums[mid]<target)
                {
                    low=mid+1;
                    insertLocation = low;
                }
            }
            return insertLocation;
    }
}
posted @ 2021-12-31 21:08  古宇  阅读(22)  评论(0编辑  收藏  举报

欢迎来刀