leetcode 034 —— Search for a Range
2015-07-15 14:04
579 查看
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
For example,
Given
return
思路:二分法先查找到任意target所在的位置,再往两边搜索边界
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> res;
int pos = posFind(nums, target, 0, nums.size() - 1);
if (pos == -1){
res.push_back(-1);
res.push_back(-1);
return res;
}
int l = pos, r = pos;
while (nums[l] == target&&l>=0)
l--;
while (nums[r] == target&&r <= nums.size() - 1)
r++;
res.push_back(l+1);
res.push_back(r - 1);
return res;
}
int posFind(vector<int> &nums, int target, int l, int r){
int mid;
while (l <= r){
mid = (l + r) / 2;
if (nums[mid] == target)
return mid;
else if (nums[mid] < target)
l = mid + 1;
else
r = mid - 1;
}
return -1;
}
};
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> res;
int pos = posFind(nums, target, 0, nums.size() - 1);
if (pos == -1){
res.push_back(-1);
res.push_back(-1);
return res;
}
int l = pos, r = pos;
while (nums[l] == target&&l>=0)
l--;
while (nums[r] == target&&r <= nums.size() - 1)
r++;
res.push_back(l+1);
res.push_back(r - 1);
return res;
}
int posFind(vector<int> &nums, int target, int l, int r){
int mid;
while (l <= r){
mid = (l + r) / 2;
if (nums[mid] == target)
return mid;
else if (nums[mid] < target)
l = mid + 1;
else
r = mid - 1;
}
return -1;
}
};
相关文章推荐
- JAVA学习应该从哪方面着手呢?
- RedHat更新GCC升级4.9.2
- 信息安全专业知识点大提纲
- PC+运动控制卡的控制方案
- Codeforces Round #274(Div2) B. Towers 贪心
- Android SnackBar
- Linux strace命令
- WebLogic之Session
- asp.net如何读写xml文件
- c# 对一下XML文档进行添加删改的实例
- SDWebImage的简单使用
- iOS开发——UI基础-自定义构造方法,layoutSubviews,Xib文件,利用Xib自定义View
- ubuntu/linux mint 创建proc文件的三种方法(两)
- 单例设计模式
- LeetCode - Largest Number (sort的cmp的写法)
- envi 监督分类超详细过程
- Chapter 5. Forms
- 项目练习:自己写一个CheckBoxList,RadioButtonList控件
- Delphi LoadUserProfile
- 错误:Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules