34. Search for a Range
来源:互联网 发布:淘宝申请退货时间到了 编辑:程序博客网 时间:2024/04/29 21:25
Given a sorted array of integers, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1]
.
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
return [3, 4]
.
【思路】STL上已经为我们实现好了 二分查找 函数的接口。对于“vector”容器,我们可以利用“lower_bound” 查找 目标数值 target 第一次出现的位置。如果原数组中并不存在这个 target,lower_bound会返回第一个比target值大的位置。利用lower_bound函数获取 target 在原数组的位置,而类似的函数upper_bound则会返回第一个比target大的位置。
class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> re; if(nums.size()==0) return re; vector<int>::iterator it1 = lower_bound(nums.begin(), nums.end(), target); vector<int>::iterator it2 = upper_bound(nums.begin(), nums.end(), target); if(*it1!=target) { re.push_back(-1); re.push_back(-1); return re; }else { re.push_back(it1 - nums.begin()); re.push_back(it2 - nums.begin() - 1); } return re; }};
二分查找+递归
<pre name="code" class="cpp">class Solution {public: int binarySearch(vector<int>nums, int first, int last, int target) { while(first<= last) { int mid = first + (last - first) /2; if(nums[mid]==target) { return mid; }else if(nums[mid]>target) last = mid-1; else first = mid +1; } return -1; } vector<int> searchRange(vector<int>& nums, int target) { /*vector<int> re; if(nums.size()==0) return re; vector<int>::iterator it1 = lower_bound(nums.begin(), nums.end(), target); vector<int>::iterator it2 = upper_bound(nums.begin(), nums.end(), target); if(*it1!=target) { re.push_back(-1); re.push_back(-1); return re; }else { re.push_back(it1 - nums.begin()); re.push_back(it2 - nums.begin() - 1); } return re;*/ //二分查找 vector<int> ret(2,-1); if(nums.size()==0) return ret; int low = 0, high = nums.size()-1; int left; int right; while((left = binarySearch(nums, low, high, target)) != -1) { ret[0] = left; high = left-1; } low = 0, high = nums.size()-1; while((right = binarySearch(nums, low, high, target)) != -1) { ret[1] = right; low = right+1; } return ret; }};
0 0
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 34. Search for a Range
- 4G网络架构
- 牛吃草问题 (牛顿问题)
- Google深度学习笔记 从线性分类器到深度神经网络
- 今天开始来写技术感受了望和同行技术人员一起交流恳请技术人员们谅解下让我首先发布下: 国学十二道 及 一句话概括国学经典书目精髓
- 数据挖掘中的特征选择问题
- 34. Search for a Range
- Linux音频设备驱动
- LeetCode|Binary Tree Right Side View
- 微软扫盲贴:Windows 和 GPT 常见问题解答(uefi、GPT、ESP、MSR之类的概念)
- C# UDP服务编程(NativeErrorCode = 10054)
- leetcode笔记--Create Maximum Number
- DeepID人脸识别算法之三代
- 阻塞和异步
- 函数的调用约定