LeetCode | Search for a Range
2014-08-10 11:59
295 查看
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
For example,
Given
return
题目解析:
这道题目很典型,在二分查找的基础上,将等于target的判断归并到一边,会得到上界或者下届。那么我们需要写查找上下界的函数,又因为代码类似,就用一个bool值,来代表要找上届还是下届,归并成一个函数。
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].
题目解析:
这道题目很典型,在二分查找的基础上,将等于target的判断归并到一边,会得到上界或者下届。那么我们需要写查找上下界的函数,又因为代码类似,就用一个bool值,来代表要找上届还是下届,归并成一个函数。
#include <iostream> #include <vector> using namespace std; class Solution { public: int FindPos(int A[],int lo,int hi,int target,bool fleft){ if(hi < lo) return -1; if(fleft == true){ while(lo <= hi){ int mid = (lo + hi)/2; if(A[mid]<target) //通过分析,二分查找,利用一半相等一半不相等,来确定上下界! lo = mid+1; else hi = mid-1; } return hi+1; //要留意返回值 } while(lo <= hi){ int mid = (lo + hi)/2; if(A[mid] <= target) lo = mid + 1; else hi = mid - 1; } return lo-1; } vector<int> searchRange(int A[], int n, int target) { vector<int> ans; int left = FindPos(A,0,n-1,target,true); int right = FindPos(A,0,n-1,target,false); if(right < left){ //通过这句来判断是否存在target值,不存在就重新赋值成-1 left = -1; right = -1; } ans.push_back(left); ans.push_back(right); return ans; } }; int main() { int arr[] = {5,7,7,8,8,9}; int n = sizeof(arr)/sizeof(int); int target; Solution tp; while(cin >> target){ vector<int> vec; vec = tp.searchRange(arr,n,target); cout << "["<<vec[0] << "," << vec[1] << "]" << endl; } return 0; }
相关文章推荐
- leetcode -- Search for a Range (TODO)
- LeetCode Search for a Range
- LeetCode —— Search for a Range
- LeetCode | Search for a Range
- leetcode: Search for a Range
- LeetCode: Search for a Range
- [Leetcode 89] 34 Search for a Range
- LeetCode 38: Search for a Range
- Leetcode Search for a Range
- [LeetCode]Search for a Range
- [Leetcode] Search for a Range
- [LeetCode] Search for a Range
- [LeetCode] Search for a Range 解题报告
- LeetCode: Search for a Range
- leetcode 96: Search for a Range
- [LeetCode] Search for a Range
- [leetcode] Search for a Range
- [Leetcode] Search for a Range
- Leetcode: Search for a Range
- LeetCode - Search for a Range