Leetcode#34 Search for a Range
2015-07-11 16:11
381 查看
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
Difficulty: Medium
典型的二分法应用,log(n)的复杂度。
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].
Difficulty: Medium
典型的二分法应用,log(n)的复杂度。
vector<int> searchRange(vector<int>& nums, int target) { int len = nums.size(); int start = 0; int en = len - 1; int middle,i = -1; vector<int> ans; if(len==1&&nums[0]==target) { ans.push_back(0); ans.push_back(0); return ans; } if(len==1&&nums[0]!=target) { ans.push_back(-1); ans.push_back(-1); return ans; }//当长度为1时的两种情况 while(en>=start) { if(en-start==1&&nums[en]!=target&&nums[start]!=target) break; if(en-start==1&&nums[en]==target&&nums[start]!=target) { i = en; break; } middle = start+((en-start)>>1); if(nums[middle]==target) { i = middle; break; } else if(nums[middle]>target) en = middle; else start = middle; } //先通过二分法找到至少一个目标的index if(i==-1) { ans.push_back(-1); ans.push_back(-1); return ans; }//若没有找到target,返回(-1,-1) int j = i; while(nums[j]==target&&j>=0) j--; ans.push_back(j+1); j=i; while(nums[j]==target&&j<len) j++; ans.push_back(j-1);//向前和向后找第一个和最后一个的index return ans; }
相关文章推荐
- CSAPP LAB---buflab-handout(缓冲区溢出实验)
- 数据结构基础 图的遍历(一) 之 DFS
- Rfc2898DeriveBytes解密如何通过java实现
- LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
- Linux中文件的时间属性(涉及touch、stat命令)
- GIT配置
- Java多线程基本概念
- MVC 母版页和部分页面
- Webview的Cookie和缓存处理
- Android viewpager切换到最后一页时,跳转至其他activity
- Ilya and Diplomas (贪心5)
- AIX用裸设备扩数据库表空间专题 (前面 + 自己的comments)
- CSAPP LAB---perflab-handout性能优化
- Struts2 标签库与OGNL的使用
- 使用InternetGetConnectedState这个API判断网络是否连通
- Sicily 1210. 二叉树
- AES加密 实现
- 错误:浏览器访问jsp页面,却变成了下载该页面
- Oracle 10g RAC Cluster interconnects
- UI1_UITabBarController