34. Search for a Range

来源:互联网 发布:adobe flash cs3 mac 编辑:程序博客网 时间:2024/04/29 22:47

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

思路:先用二分法找到有target的地方,再向左向右找边界。这题也真是做了超长时间。

class Solution {public:    vector<int> searchRange(vector<int>& nums, int target) {       vector<int> result;         result.push_back(getBoundRange(nums, 0, nums.size()-1, target, true));          result.push_back(getBoundRange(nums, 0, nums.size()-1, target, false));          return result;    }    int getBoundRange(vector<int> nums, int l, int r, int target, bool left){          if(l>r) return -1;          else{          int m = (l+r)/2;          if(nums[m]==target){              if(left){                  if(m==0 || nums[m-1]<target) return m;                  else return getBoundRange(nums, l, m-1, target, left);              }else {                  if(m==nums.size()-1 || target<nums[m+1]) return m;                  else return getBoundRange(nums, m+1, r, target, left);              }          }          else if (nums[m]>target) {              return getBoundRange(nums, l, m-1, target, left);          }else {              return getBoundRange(nums, m+1, r, target, left);          }          }      }  };
0 0
原创粉丝点击