码迷,mamicode.com
首页 > 其他好文 > 详细

Find First and Last Position of Element in Sorted Array

时间:2019-05-08 21:57:47      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:star   search   ||   while   ted   lse   sort   must   position   

Given an array of integers nums sorted in ascending order, find the starting and ending position of a given targetvalue.

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].

Example 1:

Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]

Example 2:

Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]

code

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

class Solution
{
public:
    vector<int> searchRange(vector<int>& nums, int target)
    {
        vector<int> res{-1,-1};
        if(nums.empty()||nums.size()<0||nums.at(0)>target||target>nums.at(nums.size()-1))
            return res;

        int low=0;
        int height=nums.size()-1;
        int pos=-1;
        while(low<=height)
        {
            int mid=(low+height)/2;
            if(nums.at(mid)==target)
            {
                pos=mid;
                break;
            }

            if(target<nums.at(mid))
                height=mid-1;
            else
                low=mid+1;
        }
        if(pos==-1)
            return res;

        int i=1;
        int j=1;
        bool flag1=true;
        bool flag2=true;

        while(flag1||flag2)
        {
            if(pos-i>=0&&nums.at(pos-i)==target)
                ++i;
            else
                flag1=false;

            if(pos+j<nums.size()&&nums.at(pos+j)==target)
                ++j;
            else
                flag2=false;
        }
        res.at(0)=pos-(i-1);
        res.at(1)=pos+(j-1);
        return res;
    }
};

int main()
{
    vector<int> arr;
    Solution s;
    vector<int> res(s.searchRange(arr,1));
    for(auto i:res)
        cout<<i<<" ";
    cout<<endl;
    return 0;
}

code2

vector<int> searchRange(vector<int>& nums, int target) {
    int start = 0, end = nums.size(), mid, left, right;
    while (start < end) {
        mid = (start + end) / 2;
        if (nums[mid] >= target)
            end = mid;
        else
            start = mid + 1;
    }
    left = start;
    start = 0, end = nums.size();
    while (start < end) {
        mid = (start + end) / 2;
        if (nums[mid] > target)
            end = mid;
        else
            start = mid + 1;
    }
    right = start;
    return left == right ? vector<int> {-1,-1} : vector<int> {left,right-1};
}

 

Find First and Last Position of Element in Sorted Array

标签:star   search   ||   while   ted   lse   sort   must   position   

原文地址:https://www.cnblogs.com/tianzeng/p/10834710.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!