标签:
----------------------------------------------------------------------------
Mean:
给定一个有序数组和一个数k,求k在这个数组中的起始下标和结束下标.
analyse:
二分查找.
Time complexity: O(N)
view code
/** * ----------------------------------------------------------------- * Copyright (c) 2016 crazyacking.All rights reserved. * ----------------------------------------------------------------- * Author: crazyacking * Date : 2016-03-01-22.03 */ #include <queue> #include <cstdio> #include <set> #include <string> #include <stack> #include <cmath> #include <climits> #include <map> #include <cstdlib> #include <iostream> #include <vector> #include <algorithm> #include <cstring> using namespace std; typedef long long(LL); typedef unsigned long long(ULL); const double eps(1e-8); class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> ret; int len=nums.size(); int low=0,high=len-1; while(low<=high) { int mid=(low+high)>>1; if(target<nums[mid]) high=mid-1; else if(target>nums[mid]) low=mid+1; else { int frontIndex=mid,backIndex=mid; while(frontIndex-1>=0 && nums[frontIndex]==nums[frontIndex-1]) --frontIndex; while(backIndex+1<len && nums[backIndex]==nums[backIndex+1]) ++backIndex; ret.push_back(frontIndex); ret.push_back(backIndex); return ret; } } ret.push_back(-1); ret.push_back(-1); return ret; } }; int main() { Solution solution; int n,k; while(cin>>n>>k) { vector<int> ve; for(int i=0;i<n;++i) { int tempVal; cin>>tempVal; ve.push_back(tempVal); } ve=solution.searchRange(ve,k); for(auto p:ve) cout<<p<<endl; } return 0; } /* */
LeetCode - 34. Search for a Range
标签:
原文地址:http://www.cnblogs.com/crazyacking/p/5232761.html