LeetCode: Search for a Range 解题报告
来源:互联网 发布:德力西 知乎 编辑:程序博客网 时间:2024/03/29 22:45
Search for a Range
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].
SOLUTION 1:
使用改进的二分查找法。终止条件是:left < right - 1 这样结束的时候,会有2个值供我们判断。这样做的最大的好处是,不用处理各种越界问题。
请同学们一定要记住这个二分法模板,相当好用哦。
1. 先找左边界。当mid == target,将right移动到mid,继续查找左边界。
最后如果没有找到target,退出
2. 再找右边界。 当mid == target,将left移动到mid,继续查找左边界。
最后如果没有找到target,退出
class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { if(nums.empty()) { vector<int> resvec; resvec.push_back(-1); resvec.push_back(-1); return resvec; } int left=0,right=nums.size()-1; while(left<right-1) { int mid = (right +left) / 2; if(nums[mid]<target) left=mid; else right=mid; } int res_left; if(nums[left]==target) res_left=left; else if(nums[right]==target) res_left=right; else res_left=-1; left=0,right=nums.size()-1; while(left<right-1) { int mid = (right +left) / 2; if(nums[mid]>target) right=mid; else left=mid; } int res_right; if(nums[right]==target) res_right=right; else if(nums[left]==target) res_right=left; else res_right=-1; vector<int> resvec; resvec.push_back(res_left); resvec.push_back(res_right); return resvec; }};
注意以下疏漏:
1.函数输入nums可能为空,所以要单独考虑 if(nums.empty())
2.二分法要灵活运用,不要只局限于找一个中间值,一定要灵活运用,各种形式的二分法
0 0
- Leetcode Search for a Range 解题报告
- LeetCode解题报告--Search for a Range
- [LeetCode] Search for a Range 解题报告
- LeetCode: Search for a Range 解题报告
- [leetcode] 34. Search for a Range 解题报告
- Leetcode #34. Search for a Range 范围搜寻 解题报告
- [Leetcode] 34. Search for a Range 解题报告
- [LeeCode]Search for a Range, 解题报告
- leetcode解题笔记-Search for a Range
- [leetcode javascript解题]Search for a range
- leetcode解题方案--034--Search for a Range
- LeetCode: Search for a Range
- LeetCode Search for a Range
- [Leetcode] Search for a Range
- LeetCode : Search for a Range
- [LeetCode] Search for a Range
- [Leetcode] Search for a Range
- Leetcode Search for a Range
- strip---机器学习实战与Python
- 空白字符编码
- synchronized与static synchronized的区别
- noip2016 1.排名
- HDU 2191 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (背包问题)
- LeetCode: Search for a Range 解题报告
- hihocoder 136 #1269 优化延迟 二分+优先队列
- cocos2dx-lua 对lua项目中class(sub,super)的理解
- 《C++ Primer》读书笔记-第一章 Hello World
- getSystemService与getService区别
- 【C++】浅析C++中的对象模型
- struts2 无法获取action属性的问题解决
- LeetCode 16. 3Sum Closest
- CSS基础{精灵图、梅兰商贸}