leetcode34--- Search for a Range

来源:互联网 发布:特效制作软件 编辑:程序博客网 时间:2024/06/16 21:38

问题描述:

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,-1]。注意时间效率是O(longN)。

问题求解:

采用二分法,分别搜索左边界和右边界。

class Solution {public:    vector<int> searchRange(vector<int>& nums, int target) {        int n=nums.size();        int start = Leftbound(nums, n, target);          int end = Rightbound(nums, n, target);          vector<int> res(2);          res[0] = start; res[1] = end;          return res;      }    int Leftbound(vector<int>& nums, int n, int target)      {//寻找左边界          if(n == 0) return -1;          int left = 0;          int right = n-1;          while(left < right)//!!!          {              int mid = left+(right-left)/2;              if(nums[mid] >= target) right = mid;              else left = mid+1;          }          if(nums[left] == target) return left;          else return -1;      }      int Rightbound(vector<int>& nums, int n, int target)      {//寻右边界           if(n == 0) return -1;          int left = 0;          int right = n-1;          while(left <= right)//!!!        {              int mid = left+(right-left)/2;              if(nums[mid] > target) right = mid-1; //!!!              else left = mid+1;          }          if(nums[right] == target) return right;          else return -1;      }  };
0 0
原创粉丝点击