LeetCode 34. Search for a Range
来源:互联网 发布:localstorage存储数据 编辑:程序博客网 时间:2024/06/05 20:42
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].
题目链接
题意:查找一列有序数组中某个数字出现的位置区间。
代码一(9ms):使用STL lower_bound upper_bound函数。
ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。
ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中第一个大于val的位置。
lower_bound和upper_bound如下图所示:
class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> vec; //ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。 //ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中第一个大于val的位置。 int low=lower_bound(nums.begin(),nums.end(),target)-nums.begin(); int high=upper_bound(nums.begin(),nums.end(),target)-nums.begin(); if(low==high){ vec.push_back(-1); vec.push_back(-1); return vec; } vec.push_back(low); vec.push_back(high-1); return vec; }};
代码二 ( 12ms ):
class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> vec(2,-1); //二分查找结束时,返回的位置一定是这个数开始的位置(如果存在的话)。 int low=0,high=nums.size()-1,mid=0; while(low<high){ mid=(low+high)/2; if(nums[mid]<target){ low=mid+1; } else high=mid; } if(nums[low]!=target){ return vec; } vec[0]=low; high=nums.size()-1; while(low<high){ mid=(low+high+1)/2; if(nums[mid]>target){ high=mid-1; } else low=mid; } vec[1]=high; return vec; }};
代码二解释
0 0
- [LeetCode]34.Search for a Range
- LeetCode --- 34. Search for a Range
- LeetCode 34.Search for a Range
- [Leetcode] 34. Search for a Range
- [leetcode] 34.Search for a Range
- 【leetcode】34. Search for a Range
- [leetcode] 34. Search for a Range
- Leetcode 34. Search for a Range
- LeetCode 34. Search for a Range
- <LeetCode OJ> 34. Search for a Range
- 34. Search for a Range LeetCode
- [Leetcode]34.Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- LeetCode *** 34. Search for a Range
- LeetCode 34. Search for a Range
- CCF-201412-4 最优灌溉(最小生成树)
- Mibatis 多对多
- C++ 多线程之临界区
- Socket鏈接與Http鏈接的區別
- 原生JS+CSS(CSS3)+HTML实现页面弹框
- LeetCode 34. Search for a Range
- boost的使用
- 数据仓库01
- 【J2SE】——流
- 前端冷知识集锦
- 小数、分数的计算
- 字符串与数组之间的转换
- TestNG-常用注解介绍
- 软复用pcr矫正