4_35.搜索插入位置

题目描述:
image
解题思路:

  • 二分查找法:
    对于有序数组的查找目标值,一般使用二分查找法找到其索引。虽然在本题中,对于目标值不存在数组中,会返回其将要被插入的位置,依然能够使用二分查找法。
    自己的写法虽然使用了二分查找法,对比了官方解法之后,有两个点需要改进:
    • 对于取中间值的运算,使用移位操作符。即(mid = (left + right)/ 2) --> ((mid = (right - left) >> 1) + left)
      把加法改成减法,是为了避免溢出,移位是计算机计算移位速度更快。
    • 对于返回索引值:
      看到官方的解法后,不难分析得出,返回值有以下两种情形:
      + 查找到该target,直接返回索引值即可
      + 未查找到该target,此时退出while循环,一定是因为left == right,因此要插入的位置一定是在该数组之后。
自己的二分查找代码
class Solution {
    public int searchInsert(int[] nums, int target) {
        int len = nums.length;
        int left = 0;
        int right = len - 1;
        while (left <= right){
            int mid = (left + right) / 2;
            if(nums[mid] == target){
                return mid;
            }else if (nums[mid] < target){
                left = mid + 1;
            }else {
                right = mid - 1;
            }
        }
        return left;
    }
}
优化代码
class Solution {
    public int searchInsert(int[] nums, int target) {
        int n = nums.length;
        int left = 0, right = n - 1, ans = n;
        while (left <= right) {
            int mid = ((right - left) >> 1) + left;
            if (target <= nums[mid]) {
                ans = mid;
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return ans;
    }
}

posted @ 2021-10-16 22:04  Forrestyu  阅读(70)  评论(0)    收藏  举报