LeetCode | 34. Search for a Range
来源:互联网 发布:爱奇艺格式转换器 mac 编辑:程序博客网 时间:2024/05/29 16:32
Given an array of integers sorted in ascending order, 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].
题意:在O(log n )的时间内找到给定target元素在数组中的范围下标。
方法:用两次二分,找出第一个比它大的(mmax)和最后一个比它小的(mmin)。
#include <iostream>#include <vector>using namespace std;vector<int> searchRange(vector<int>& nums, int target){ //先找到最后一个比它小的,再找第一个比它大的 int len = nums.size(); int flag = -1; //判断是否有target int mmin = -1, mmax = len; int left = 0, right = len-1; vector<int> res; while(left <= right) { int mid = (left+right)/2; if(nums[mid] == target) { flag = mid; break; } else if(nums[mid] < target) left = mid+1; else right = mid-1; } if(flag == -1) //找不到target { mmin = -1; mmax = -1; res.push_back(mmin); res.push_back(mmax); return res; } else { //cout<<flag<<endl; //找出最后一个比它小的 left = 0; right = flag; while(left <= right) { int mid = (left+right)/2; if(nums[mid] < target) { if(mid+1 <= flag) { if(nums[mid+1] >= target) { mmin = mid; break; } else { left = mid+1; } } else break; } else//比target大 { right = mid-1; } } //cout<<mmin<<endl; //找出第一个比它大的 left = flag; right = len-1; while(left <= right) { int mid = (left+right)/2; if(nums[mid] > target) { if(mid-1 >= 0) { if(nums[mid-1] <= target) { mmax = mid; break; } else { right = mid-1; } } else break; } else//不比target大 { left = mid+1; } } } res.push_back(mmin+1); res.push_back(mmax-1); return res;}int main(){ vector<int> v; int num, target; while(cin>>num) { v.clear(); for(int i=0;i<num;i++) { int t; cin>>t; v.push_back(t); } cin>>target; vector<int>res = searchRange(v,target); for(int i=0;i<res.size();i++) { cout<<res[i]<<" "; } cout<<endl; } return 0;}
阅读全文
1 0
- [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
- Bootstrap3.0学习第二十四轮(JavaScript插件——按钮)
- 1018: 奇数偶数
- 云计算基础,相关概念,IaaS,PaaS,SaaS,CaaS,MaaS
- springboot连接mongodb
- Nio学习之通过通道实现最简单的文件复制代码
- LeetCode | 34. Search for a Range
- opencv3_java 图形图像的翻转Flip flip
- Openwrt 實戰
- 1019: 公园门票
- java入门学习:多线程创建-Thread,Runnable,callable和threadpool
- 使用jQuery 快速高效制作 网页特效
- React native 分辨率适配
- Queuing(矩阵快速幂(递推and模板))
- Android如何判断网络状态是否良好