当前位置:网站首页>[binary search] 34 Find the first and last positions of elements in a sorted array
[binary search] 34 Find the first and last positions of elements in a sorted array
2022-07-05 05:16:00 【lee2813】
One 、 subject
Given an array of integers in ascending order nums, And a target value target. Find the start and end position of the given target value in the array .
If the target value does not exist in the array target, return [-1, -1].
Advanced :
You can design and implement time complexity of O(log n) Does the algorithm solve this problem ?
Example 1:
Input :nums = [5,7,7,8,8,10], target = 8
Output :[3,4]
Example 2:
Input :nums = [5,7,7,8,8,10], target = 6
Output :[-1,-1]
Example 3:
Input :nums = [], target = 0
Output :[-1,-1]
Two 、 Answer key
Solution 1 : Search for ( Time consuming )
Solution 2 : Two points search
Because the array is monotonically increasing , We can use the binary search method to speed up the search process . Here is also set as the left closed right closed interval .
When finding the corresponding element to determine whether it is the position of the first occurrence and the last occurrence of the given value , Use the following strategies :
- Finding the first occurrence position of a given value is equivalent to finding the first greater than ( Because there may be cases without this value ) Subscript equal to the given value
- Finding the last occurrence position of a given value is equivalent to finding the first subscript larger than the given value , subtracting 1
Take finding the location of the first occurrence as an example , The search results are as follows :
- The lookup value does not match the target value ( Less than the target ): Take the left range
- The search value matches the target value ( Greater than equal target value ): Take the right range
- Left boundary > Right border : return
l
, Because the matching situation here is greater than or equal to , Moving isl
, Therefore, it returnsl
among , The method of using dichotomy to determine the position of elements for comparison is the same , The comparison strategy is different .
3、 ... and 、 Code
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
if(nums.size()==0) return vector<int>{
-1,-1};
int leftindex = fun1(nums,target);
int rightindex = fun2(nums,target);
if(leftindex==nums.size() || nums[leftindex] != target) return vector<int>{
-1,-1};
return vector<int>{
leftindex,rightindex};
}
int fun1(vector<int>& nums,int target){
int l = 0,r = nums.size() - 1;
int mid;
while(l<=r){
mid = (l + r) / 2;
if(nums[mid] >= target) r = mid - 1;
else l = mid + 1;
}
return l;
}
int fun2(vector<int>& nums,int target){
int l = 0,r = nums.size() - 1;
int mid;
while(l<=r){
mid = (l + r) / 2;
if(nums[mid] > target) r = mid - 1;
else l = mid + 1;
}
return l-1;
}
};
边栏推荐
- Out and ref functions of unity
- Applet Live + e - commerce, si vous voulez être un nouveau e - commerce de détail, utilisez - le!
- 《动手学深度学习》学习笔记
- 64 horses, 8 tracks, how many times does it take to find the fastest 4 horses at least
- win10虚拟机集群优化方案
- Simple HelloWorld color change
- UE4/UE5 虚幻引擎,材质篇(三),不同距离的材质优化
- PMP candidates, please check the precautions for PMP examination in July
- cocos_ Lua loads the file generated by bmfont fnt
- GBase数据库助力湾区数字金融发展
猜你喜欢
随机推荐
Research on the value of background repeat of background tiling
Magnifying glass effect
[轉]: OSGI規範 深入淺出
[转]MySQL操作实战(一):关键字 & 函数
Unity get component
Es module and commonjs learning notes -- ESM and CJS used in nodejs
Solon 框架如何方便获取每个请求的响应时间?
3dsmax2018 common operations and some shortcut keys of editable polygons
FVP和Juno平台的Memory Layout介绍
Generate filled text and pictures
Unity enables mobile phone vibration
SDEI初探-透过事务看本质
Ue4/ue5 illusory engine, material chapter, texture, compression and memory compression and memory
支持多模多态 GBase 8c数据库持续创新重磅升级
Applet live + e-commerce, if you want to be a new retail e-commerce, use it!
Listview pull-down loading function
MD5 bypass
Sixth note
Recherche de mots pour leetcode (solution rétrospective)
Cocos2dx screen adaptation