LeetCode 35 搜索插入位置
Posted hellosnow
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 35 搜索插入位置相关的知识,希望对你有一定的参考价值。
链接:https://leetcode-cn.com/problems/search-insert-position
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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。那么我们定义一个check函数,看一下满足大于等于target的所有点中,第一个点的位置,那个位置就是我们所要求的解啦。check函数为 if (某个数 >= target)。那么我们要记住,当我们要算满足后面一段性质的解的时候,更新方式是 r = mid, l = mid + 1.
可以看出来,满足后面一段的性质的表现是大于等于,满足前面一段的性质的表现是小于等于。并且解都要包含在前一段或后一段性质里面。
c++代码如下:
1 class Solution 2 public: 3 int searchInsert(vector<int>& nums, int target) 4 if(nums.empty() || nums.back() < target) return nums.size(); 5 int l = 0, r = nums.size() - 1; 6 while(l < r) 7 int mid = l + r >> 1; 8 if(nums[mid] >= target) r = mid; 9 else l = mid + 1; 10 11 return r; 12 13 ;
在这道题中,开头还要错判一下,如果数组是空的,或者最后一个数都小于target,注意没有等于,等于的情况包含在下面的判断里面,那么直接返回数组的size就好。
以上是关于LeetCode 35 搜索插入位置的主要内容,如果未能解决你的问题,请参考以下文章