LeetCode - 34. Search for a Range
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode - 34. Search for a Range相关的知识,希望对你有一定的参考价值。
34. Search for a Range
Problem‘s Link
----------------------------------------------------------------------------
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的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode OJ 34. Search for a Range
[LeetCode]34. Search for a Range
LeetCode OJ 34Search for a Range
[leetcode-34-Search for a Range]