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

[LeetCode] 34 - Search for a Range

时间:2015-08-31 15:07:18      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

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

 

class Solution {
public:
  vector<int> searchRange(vector<int>& nums, int target) {
    vector<int> res({-1, -1});
    if (nums.empty()) {
      return res;
    }
    int start = 0;
    int end = nums.size() -1;
    int idx = -1;
    while (start <= end) {
      int mid = (end + start) >> 1; // /2
      if (nums[mid] == target) {
        idx = mid;
        break;
      }
      if (nums[mid] > target) {
        end = mid -1;
      }
      else {
        start = mid + 1;
      }
    }
    if (idx == -1) {
      return res;
    }
    for (end = idx; end < nums.size() -1; ++end) {
      if (nums[end] != nums[end + 1]) {
        break;
      }
    }
    for (start = idx; start >0 ; --start) {
      if (nums[start] != nums[start -1 ]) {
        break;
      }
    }
    res[0] = start;
    res[1] = end;
    return res;
  }
};

 

[LeetCode] 34 - Search for a Range

标签:

原文地址:http://www.cnblogs.com/shoemaker/p/4772978.html

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