代码随想录笔记[2]巧妙的return

35.搜索插入位置

 

力扣题目链接(opens new window)

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 1:

  • 输入: [1,3,5,6], 5
  • 输出: 2

示例 2:

  • 输入: [1,3,5,6], 2
  • 输出: 1

示例 3:

  • 输入: [1,3,5,6], 7
  • 输出: 4

示例 4:

  • 输入: [1,3,5,6], 0
  • 输出: 0

思路

  • 这个也属于二分查找的范围,题目要求给定一个target,如果数组中有这个target则返回下标,如果没有这个target则返回这个数据在数组中顺序插入的位置

  • 我感觉这个题最妙的就是找插入位置的过程

    return right +1

    就可以轻松找到我们的插入位置

    为什么呢?

  • 我们找插入位置,无非也就三种情况

    1. 要插入的非常小,得插在最左边

    2. 要插入的非常大,要插在最右边

    3. 要插入的插进了我们数组的中间

  • 先看第一种情况

  • 再看第二种情况

  • 最后是第三种情况

  • 经过我们刚刚的判断,我们发现

    无论什么情况,元素的插入位置始终是right+1

    所以,我们return right+1来表示元素的插入位置

太美丽啦 算法!

再来看看下面的代码吧家人们

class Solution {
    public int searchInsert(int[] nums, int target) {
     int left = 0;
     int right = nums.length-1;
     int mid = 0;
     while(left<=right)
     {
         mid = (int)(left+(right-left)/2);
         if(nums[mid]>target)
         {
             right = mid-1;
         }
         if(nums[mid]<target)
         {
             left = mid+1;
         }
         if(nums[mid]==target)
         {
             return mid;
         }
         
      }
      return right+1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值