[leetcode] 34. Search for a Range
来源:互联网 发布:飞鸽传书经典mac 编辑:程序博客网 时间:2024/05/16 01:55
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]
.
这道题是查找目标值在数组中的下标区间,题目难度为Medium。
时间复杂度限定为O(logn),很自然会想到用二分查找法,只是这里需要找出target的上界和下界。分别用bgn、end和mid表示查找过程中的左端、右端和中点,传统的二分查找法在nums[mid]==target时即找到结果退出,这里我们要找出上界和下界,所以不能从这里退出。在找下界时,如果nums[mid]>=target将end置为mid-1,否则将bgn置为mid+1,这样会逐渐接近target的下界,在循环结束时bgn即是target的下界。同理,在找上界时,如果nums[mid]>target将end置为mid-1,否则将bgn置为mid+1,这样会逐渐接近target的上界,在循环结束时bgn在target的上界加1的位置。如果没有查找到target,上界和下界是一样的,我们就以此来判断是否有target存在。具体代码:
class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { int bgn = 0, end = nums.size() - 1, mid, left, right; while(bgn <= end) { mid = (bgn + end) / 2; if(nums[mid] >= target) end = mid - 1; else bgn = mid + 1; } left = bgn; end = nums.size() - 1; while(bgn <= end) { mid = (bgn + end) / 2; if(nums[mid] > target) end = mid - 1; else bgn = mid + 1; } right = bgn; if(left == right) return vector<int> {-1, -1}; else return vector<int> {left, right - 1}; }};
- [LeetCode]34.Search for a Range
- LeetCode --- 34. Search for a Range
- LeetCode 34.Search for a Range
- [Leetcode] 34. Search for a Range
- [leetcode] 34.Search for a Range
- 【leetcode】34. Search for a Range
- [leetcode] 34. Search for a Range
- Leetcode 34. Search for a Range
- LeetCode 34. Search for a Range
- <LeetCode OJ> 34. Search for a Range
- 34. Search for a Range LeetCode
- [Leetcode]34.Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- leetcode 34. Search for a Range
- LeetCode *** 34. Search for a Range
- LeetCode 34. Search for a Range
- dom4j 解析xml 文档
- popup window点击窗口外区域不消失的解决方法
- 文石(onyx boox M92)电纸书(linux) 下写绘图板程序Mypainter.oar
- aaaaaaaaaaaaaaaaaaaaa
- linux下安装zabbix客户端
- [leetcode] 34. Search for a Range
- Android开发的那些坑和小技巧
- 【MVC框架】路由机制
- 客制化物料搬运单流程
- http和socket之长连接和短连接区别
- fresco如何配合PhotoView使用实现图片缩放
- css怪异模式总结
- nyoj8
- DSP/BIOS简介