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相关推荐

  1. LeetCode - 34. Search for a Range

    34. Search for a Range Problem's Link -------------------------------------------------------------- ...

  2. 34. Search for a Range

    一句话思路:新建数组存储位置,输出数组 一刷报错: 是nums[mid],nums[start/end]和target的关系,不是mid start end和target的关系 右边界 start e ...

  3. 【leetcode】Search for a Range

    题目描述: Given a sorted array of integers, find the starting and ending position of a given target valu ...

  4. 二分法变种小结(leetcode 34、leetcode33、leetcode 81、leetcode 153、leetcode 74)

    目录 二分法细节 1.leetcode 34 在排序数组中查找元素的第一个和最后一个位置 2.不完全有序下的二分查找(leetcode33. 搜索旋转排序数组) 3.含重复元素的不完全有序下的二分查找 ...

  5. LeetCode 33. Search in Rotated Sorted Array

    问题链接 LeetCode 33. Search in Rotated Sorted Array 题目解析 给定一个 "升序" 的 无重复 数组,从中寻找目标值."升序& ...

  6. LeetCode 240. Search a 2D Matrix II

    LeetCode 240. Search a 2D Matrix II Solution1: 为什么把第74题的代码改都不用改的拿过来就可以AC,一脸懵逼啊... class Solution { p ...

  7. LeetCode 74. Search a 2D Matrix

    LeetCode 74. Search a 2D Matrix Solution1:我的答案 <剑指offer>原题 class Solution { public:bool search ...

  8. 【二分法】LeetCode 35. Search Insert Position

    LeetCode 35. Search Insert Position Solution1:我的答案 class Solution { public:int searchInsert(vector&l ...

  9. [LeetCode] Search for a Range [34]

    题目 Given a sorted array of integers, find the starting and ending position of a given target value. ...

最新文章

  1. 【微信小程序之画布】三:手指触摸绘画椭圆
  2. 记WinCE下调试SIM900 GSM module
  3. 20135223何伟钦—信息安全系统设计基础第七周学习总结
  4. 位姿检索PoseRecognition:LSH算法.p稳定哈希
  5. Indy中判断邮件来源
  6. java实现压缩图片的方法
  7. 博士毕业2年后,他成为985大学副院长
  8. 透彻理解回文~单链表的逆序~
  9. 关于二分查找 使用 lower_bound
  10. shell习题第22题:
  11. 围棋三番棋,得第二局得胜
  12. django 之模板层
  13. 11位大牛与您共建数智升级路径
  14. python网络编程 1
  15. SPSS入门教程—相关性分析使用方法
  16. 《工业设计史》 第二章:手工艺设计阶段
  17. 电商专业术语中英文对照
  18. 勇士主场为什么叫oracle,再见甲骨文,十年过去了,金州勇士除了复刻经典,还要再造传奇!...
  19. 【Linux】在当前目录下创建文件夹
  20. 2017CVPR NID-SLAM:基于归一化信息距离的鲁棒单目SLAM系统

热门文章

  1. 【ROS学习笔记】(八)服务数据的定义与使用
  2. 结合CmakeList来更好地理解windows下的动态库和静态库
  3. 什么是锁PHP,PHP简单分布式锁-PHP中的锁
  4. 纵坐标是横的还是竖的_木地板怎么铺?木地板是横铺好还是竖铺好!
  5. css制作俄罗斯方块,H5原创俄罗斯方块(基于canvas)
  6. linux内核mtd分区,嵌入式Linux MTD分区调整(MX28)
  7. onlaunch 异步_微信小程序之onLaunch与onload异步问题
  8. c语言s_gets函数作用,C语言中gets_s(),gets(),fgets()函数的比较。
  9. 二进制安装mysql集群_实战mysql集群搭建(一)--centos7下二进制安装mysql-5.6
  10. 如何在jQuery中使用is()函数