首页 > 其他 > 详细

34.Search for a Range

时间:2015-12-11 16:35:54      阅读:104      评论: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].

思路1:二分查找找到等于target的位置,再寻找target的左右边界,注意别越界!
  1. class Solution {
  2. public:
  3. vector<int> searchRange(vector<int>& nums, int target) {
  4. int temp[] = { -1, -1 };
  5. vector<int> ret(temp, temp + 2);
  6. if (nums.size() == 0)
  7. return ret;
  8. int l = 0;
  9. int r = nums.size();
  10. int mid = 0;
  11. while (l <= r){
  12. mid = (l + r) / 2;
  13. if (nums[mid] == target)
  14. break;
  15. else if (nums[mid]>target)
  16. r = mid - 1;
  17. else
  18. l = mid + 1;
  19. }
  20. if (nums[mid] != target){
  21. return ret;
  22. }
  23. l = r = mid;
  24. while (nums[l] == target&&l>0)
  25. l--;
  26. while (r<nums.size() && nums[r] == target)
  27. r++;
  28. if (nums[l] != target)
  29. l++;
  30. if (r>=nums.size()||nums[r] != target)//注意r可能为nums.size(),这种情况也要r--
  31. r--;
  32. ret[0] = l;
  33. ret[1] = r;
  34. return ret;
  35. }
  36. };
思路2:类似于lower_bound和upper_bound的实现





 




34.Search for a Range

原文:http://www.cnblogs.com/zhoudayang/p/5039456.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!