34. Search for a Range
来源:互联网 发布:汽车油耗计算器软件 编辑:程序博客网 时间:2024/06/05 04:07
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]
.
二分查找的变形:
1、没有找到返回[-1, -1]
2、只存在1个返回[pos, pos]
3、存在多个,返回端点[leftPos, rightPos]
#include <iostream>#include <set>#include <map>#include <vector>#include <sstream>#include <string>#include <algorithm>#include <bitset>using namespace std;class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int>vec; int leftPos = BinarySearchLeft(nums, target); int rightPos = BinarySearchRight(nums, target); if (nums[leftPos] != target) { vec.push_back(-1); vec.push_back(-1); } else { vec.push_back(leftPos); vec.push_back(rightPos); } return vec; }private:int BinarySearchLeft(vector<int>& nums, int target) { int left = 0; int right = nums.size() - 1; while(left <= right) { int mid = left + ((right - left) >> 1); if (nums[mid] >= target) { right = mid - 1; } else { left = mid + 1; } } return left; } int BinarySearchRight(vector<int>& nums, int target) { int left = 0; int right = nums.size() - 1; while(left <= right) { int mid = left + ((right - left) >> 1); if (nums[mid] > target) { right = mid - 1; } else { left = mid + 1; } } return right; }};int main(){Solution s;vector<int>vec{0,0,0,1,2,3};vector<int>v = s.searchRange(vec, 0);for (auto it = v.begin(); it != v.end(); it++){cout << *it << endl;}return 0;}
看,这个时间,估计得有更高效的算法了。
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
- MyBatis 多表联合查询及优化
- python笔记---需求文件requirements.txt的创建及使用
- Oracle 的入门心得
- iOS touch事件单击双击区分响应
- Hibernate4一对一关系映射(共享主键方式)
- 34. Search for a Range
- [LeetCode] 26. Remove Duplicates from Sorted Array
- c++多线程编程
- ubuntu安装wmware tools
- Java层Binder全解析。
- Unity Shader-后处理:屏幕水波效果
- 关于子线程中销毁主线程窗口的问题
- fread与file_get_contents读取文件的区别
- Intellij IDEA中通过Live Templates快速生成一段固定格式的代码,如:文本注释等。