LeetCode 34. Search for a Range
LeetCode 34. Search for a Range
Solution1:我的答案
竟然超过了100%,啊哈哈哈哈哈
class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {vector<int> res = {-1, -1};if (!nums.size()) return res;int left = 0, right = nums.size() - 1;while (left <= right) {int mid = (left + right)/2;if (nums[mid] < target)left = mid + 1;else if (nums[mid] > target)right = mid - 1;else {int i = mid, j = mid;for (; i >= 1;) {if (nums[i-1] == target)i--;else break;}for (; j <= nums.size() - 2;) {if (nums[j+1] == target)j++;else break;}res[0] = i;res[1] = j;break;}}return res;}
};
Solution2:
参考网址:http://www.cnblogs.com/grandyang/p/4409379.html
可能有些人会觉得上面的算法不是严格意义上的O(logn)的算法,因为在最坏的情况下会变成O(n),比如当数组里的数全是目标值的话,从中间向两边找边界就会一直遍历完整个数组,那么我们下面来看一种真正意义上的O(logn)的算法,使用两次二分查找法,第一次找到左边界,第二次调用找到右边界即可,具体代码如下:
class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {vector<int> res(2, -1);if (!nums.size()) return res;int left = 0, right = nums.size() - 1;while (left < right) {int mid = left + (right - left) / 2;if (nums[mid] < target) left = mid + 1;else right = mid;//必须这么写}if (nums[right] != target) return res;res[0] = right;right = nums.size();while (left < right) {int mid = left + (right - left) / 2;if (nums[mid] <= target) left = mid + 1;else right= mid;//必须这么写}res[1] = left - 1;return res;}
};
LeetCode 34. Search for a Range相关推荐
- LeetCode - 34. Search for a Range
34. Search for a Range Problem's Link -------------------------------------------------------------- ...
- 34. Search for a Range
一句话思路:新建数组存储位置,输出数组 一刷报错: 是nums[mid],nums[start/end]和target的关系,不是mid start end和target的关系 右边界 start e ...
- 【leetcode】Search for a Range
题目描述: Given a sorted array of integers, find the starting and ending position of a given target valu ...
- 二分法变种小结(leetcode 34、leetcode33、leetcode 81、leetcode 153、leetcode 74)
目录 二分法细节 1.leetcode 34 在排序数组中查找元素的第一个和最后一个位置 2.不完全有序下的二分查找(leetcode33. 搜索旋转排序数组) 3.含重复元素的不完全有序下的二分查找 ...
- LeetCode 33. Search in Rotated Sorted Array
问题链接 LeetCode 33. Search in Rotated Sorted Array 题目解析 给定一个 "升序" 的 无重复 数组,从中寻找目标值."升序& ...
- LeetCode 240. Search a 2D Matrix II
LeetCode 240. Search a 2D Matrix II Solution1: 为什么把第74题的代码改都不用改的拿过来就可以AC,一脸懵逼啊... class Solution { p ...
- LeetCode 74. Search a 2D Matrix
LeetCode 74. Search a 2D Matrix Solution1:我的答案 <剑指offer>原题 class Solution { public:bool search ...
- 【二分法】LeetCode 35. Search Insert Position
LeetCode 35. Search Insert Position Solution1:我的答案 class Solution { public:int searchInsert(vector&l ...
- [LeetCode] Search for a Range [34]
题目 Given a sorted array of integers, find the starting and ending position of a given target value. ...
最新文章
- 【微信小程序之画布】三:手指触摸绘画椭圆
- 记WinCE下调试SIM900 GSM module
- 20135223何伟钦—信息安全系统设计基础第七周学习总结
- 位姿检索PoseRecognition:LSH算法.p稳定哈希
- Indy中判断邮件来源
- java实现压缩图片的方法
- 博士毕业2年后,他成为985大学副院长
- 透彻理解回文~单链表的逆序~
- 关于二分查找 使用 lower_bound
- shell习题第22题:
- 围棋三番棋,得第二局得胜
- django 之模板层
- 11位大牛与您共建数智升级路径
- python网络编程 1
- SPSS入门教程—相关性分析使用方法
- 《工业设计史》 第二章:手工艺设计阶段
- 电商专业术语中英文对照
- 勇士主场为什么叫oracle,再见甲骨文,十年过去了,金州勇士除了复刻经典,还要再造传奇!...
- 【Linux】在当前目录下创建文件夹
- 2017CVPR NID-SLAM:基于归一化信息距离的鲁棒单目SLAM系统
热门文章
- 【ROS学习笔记】(八)服务数据的定义与使用
- 结合CmakeList来更好地理解windows下的动态库和静态库
- 什么是锁PHP,PHP简单分布式锁-PHP中的锁
- 纵坐标是横的还是竖的_木地板怎么铺?木地板是横铺好还是竖铺好!
- css制作俄罗斯方块,H5原创俄罗斯方块(基于canvas)
- linux内核mtd分区,嵌入式Linux MTD分区调整(MX28)
- onlaunch 异步_微信小程序之onLaunch与onload异步问题
- c语言s_gets函数作用,C语言中gets_s(),gets(),fgets()函数的比较。
- 二进制安装mysql集群_实战mysql集群搭建(一)--centos7下二进制安装mysql-5.6
- 如何在jQuery中使用is()函数