LeetCode:Search for a Range

来源:互联网 发布:mac git tower 编辑:程序博客网 时间:2024/06/06 01:01

问题描述:

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 [-1, -1].

For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].


思路:

1、利用二分查找法找到目标值;

2、从中间值向左找,找到与目标值相等的第一个值得下标,同理,找到右边最后一个相同值得下标;

      例如: 3,4,5,6,6,6,6,6,6,7,8,9,左下标为3,右下标为8.

3、返回两个下标。 

代码:

class Solution {public:    int searchtarget(vector<int>& nums, int start,int end,int target)    {        int mid;        if(start > end) return -1;        else        {                mid = start + (end - start) / 2;                if(nums[mid] == target)                {                    return mid;                }                else if(nums[mid] > target)                     {                         return searchtarget(nums,start,mid - 1,target);                     }                     else                     {                         return searchtarget(nums,mid + 1,end,target);                     }        }    }    vector<int> searchRange(vector<int>& nums, int target) {    vector<int> result;    int n = nums.size();    int index = searchtarget(nums,0,n-1,target);      if(index == -1)    {          result.push_back(-1);          result.push_back(-1);          return result;      }      else   {          int ls = index;          while(ls>0 && nums[index] == nums[ls-1])         <span style="white-space:pre"></span>ls--;          int rs = index;          while(rs<n-1 && nums[index] == nums[rs+1])        <span style="white-space:pre"></span>rs++;          result.clear();          result.push_back(ls);          result.push_back(rs);      }      return result;      }};

0 0
原创粉丝点击