s1-数组-2

94 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

s1-数组-2

二分问题的同类衍生题目

力扣35题

#1上题目

image-20220608193553113

#2.展开分析

这个题目我们有几个点可以考虑一下

  1. 有序的数组
  2. 没有重复元素

这个题目满足使用二分的条件,所以我们可以使用二分来进行书写

其次我们还要考虑插入,取值的的几种情况

  1. 数据查找的到->直接返回数据的下标
  2. 数据查不到,但要插入到数组当中
  3. 数据插入到表头或者表尾
  4. 数据直接查找不到

除了我们直接查找的到数据我们是

 return mid

其他的返回值我们可以直接使用

return right+1 来进行代替

这里推荐大家用一个真实的数组来进行推一推

#3.上代码

 class Solution
 {
 public:
     int searchInsert(vector<int> &nums, int target)
     {
         //这道题目作为二分的延展题目我们还是使用二分的思路给他解决掉
         int left = 0;
         int right = nums.size() - 1;
         while (left <= right)
         {
             int mid = left + ((right - left) / 2);
             if (nums[mid] > target)
             {
                 right = mid - 1;
             }
             else if (nums[mid] < target)
             {
                 left = mid + 1;
             }
             else
             {
                 return mid;
             }
         }
         return right + 1; //三种情况合体处理的结果
     }
 };

\