[Leetcode] Search for a Range
2016-12-27 23:00
417 查看
描述
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].
给定一个有序数组以及目标值,找出目标值在数组中的范围。
分析
因为是有序数组,查找范围时可以采用二分法,因此可以进行两次二分查找,分别找出目标值的左界以及右界,此外需要注意判断目标值是否在数组中,时间复杂度 O(log(n)) 。这里需要注意一下两次二分查找写法的不同。
代码
class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { int lo = 0, hi = nums.size() - 1; while (lo < hi) { int mi = lo + (hi - 4000 lo) / 2; if (nums[mi] < target) lo = mi + 1; else hi = mi; } if (nums[lo] != target) return {-1, -1}; int left = lo; lo = 0, hi = nums.size(); while (lo < hi) { int mi = lo + (hi - lo) / 2; if (target < nums[mi]) hi = mi; else lo = mi + 1; } int right = lo - 1; return {left, right}; } };
相关文章推荐
- Oracle 常用系统字典表
- python 判断网络连通
- H5 canvas控制坦克移动2
- 以太坊go-ethereum客户端(三)两种全节点启动模式
- Javascript9张思维导图
- Java 10个调试技巧
- ArrayList、LinkedList、 Vector、Map 用法比较
- JVM 优点与缺点的深入分析
- [SPOJ220]PHRASES - Relevant Phrases of Annihilation(后缀数组+二分)
- Java 类的生命周期详解
- linux初学<习题六>显示文件类型!以及大小!
- C语言编译全过程剖析
- #pragma mark-->#pragma
- 什么是Code Review 代码审查
- core data 介绍
- 写给想成为前端工程师的同学们
- 刚体Rigibody && 碰撞器Collider
- EmBitz STM32 HAL 固件库之 GPIO
- 防止重复提交表单
- ORACLE_CLASS_ENDING