zoukankan      html  css  js  c++  java
  • LeetCode

    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;
    }
    /*

    */
  • 相关阅读:
    高性能 HTML5 地铁样式的应用程序中的内容
    微软披露更多ARM Win8细节
    下一代互联网搜索的前沿:意图、知识与云
    使用 Sphinx 更好地进行 MySQL 搜索使用 Sphinx 进行非全文本搜索
    如何加快数模计算以及如何解决数模计算的收敛性问题
    Google App Engine正式支持Python 2.7
    ASP.NET MVC模型绑定
    给 MySQL 增加 Sequence 管理功能
    使用 Rational Build Forge 自动化 IBM Cloud 上的构建和发布过程
    Windows Phone 8基于WinRT?
  • 原文地址:https://www.cnblogs.com/crazyacking/p/5232761.html
Copyright © 2011-2022 走看看