LeetCode的二分查找的练习部分总结

这两天由于工作的原因,一直没有写博客,但是却把LeetCode上面的题目做了不少——二分查找。上面这些题都是这两天写的。现在简单做一个总结。

首先二分查找的思想就是对一个有规律的元素(事情)进行不断的排除,最后找到符合自己想要的结果。这种排除的时间复杂度是log2(n)级别的,查询的速度非常快。

 

33. 搜索旋转排序数组


假设按照升序排序的数组在预先未知的某个关键点上旋转。

(即 0 1 2 4 5 6 7 将变成 4 5 6 7 0 1 2)。

给你一个目标值来搜索,如果数组中存在这个数则返回它的索引,否则返回 -1。你可以假设数组中不存在重复。

思路:很简单的想法是直接一个循环遍历了,这样的时间复杂度是n。但是可以优化一下,这是一个旋转的序列,但是还是有两部分是有序的。

1、利用target数和数组第一个数比较大小,如果target比较小,就从后面往前遍历。

2、否则直接遍历。

代码:

class Solution:def search(self, nums, target):if len(nums)>0 and target <= nums[0]:if target == nums[0]:return 0for i in range(len(nums),-1,-1):if nums[i] == target:return ielse:for i in range(0,len(nums)):if nums[i] == target:return ireturn -1

 

34. 搜索范围


给定一个已经升序排序的整形数组,找出给定目标值的开始位置和结束位置。

你的算法时间复杂度必须是 O(log n) 级别。

如果在数组中找不到目标,返回 [-1, -1]

例如:
给出 [5, 7, 7, 8, 8, 10] 和目标值 8,
返回 [3, 4]

 

代码:

class Solution:def searchRange(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""lift = 0right = len(nums)-1while lift<=right:mid = (right + lift)//2if nums[right] == target:breakif nums[mid] > target:right = mid - 1else:lift = mid + 1lift = 0while lift<=right:mid = (right + lift)//2if nums[lift]==target:breakif nums[mid] >target:right = mid - 1else:lift = lift + 1if lift > right:return [-1,-1]else:return [lift,right]

35. 搜索插入位置


给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。

你可以假设在数组中无重复元素。

 

案例 1:

输入: [1,3,5,6], 5
输出: 2

 

案例 2:

输入: [1,3,5,6], 2
输出: 1

 

案例 3:

输入: [1,3,5,6], 7
输出: 4

 

案例 4:

输入: [1,3,5,6], 0
输出: 0
class Solution:def searchInsert(self, nums, target):""":type nums: List[int]:type target: int:rtype: int"""for i in range(0,len(nums)):if nums[i] >= target:return ireturn len(nums)

50. Pow(x, n)


实现 pow(xn)。

示例 1:

输入: 2.00000, 10
输出: 1024.00000

示例 2:

输入: 2.10000, 3
输出: 9.26100
class Solution:def myPow(self, x, n):i = n  #将n取绝对值的部分,如果n是负数,可以做在最后将结果取反。if n < 0:i = -nres = 1.0while i:#利用i控制循环的次数if i%2!=0:#如果i是一个奇数,将单独乘以一个xres = res * xx = x * x#x等于x的平方i = i // 2#对i取一半if n < 0:res = 1/res#对结果取反return res

69. x 的平方根


实现 int sqrt(int x) 函数。

计算并返回 x 的平方根。

x 保证是一个非负整数。

案例 1:

输入: 4
输出: 2

案例 2:

输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 由于我们想返回一个整数,小数部分将被舍去。
class Solution:def mySqrt(self, x):""":type x: int:rtype: int"""if x == 1:return 1right = xlift = 0while True:mid = lift +(right - lift)//2if lift*lift<=x and right*right>=x and (right - lift)<=1:return midelse:if mid*mid>x:right = midelse:lift = mid

74. 搜索二维矩阵


编写一个高效的算法来搜索 m x n 矩阵中的一个目标值。该矩阵具有以下特性:

  • 每行中的整数从左到右排序。
  • 每行的第一个整数大于前一行的最后一个整数。

例如,

以下矩阵:

[[1,   3,  5,  7],[10, 11, 16, 20],[23, 30, 34, 50]
]

给定 目标值= 3,返回 true

class Solution:def searchMatrix(self, matrix, target):""":type matrix: List[List[int]]:type target: int:rtype: bool"""li = list()for i in matrix:li = li + ilift = 0right = len(li)-1while lift <= right:mid = lift + (right - lift)//2if li[mid] < target:lift = mid + 1elif li[mid] > target:right = mid - 1else:return Truereturn False

81、153、154题,这三个题和33题类似,基本上是一样的。

转载于:https://www.cnblogs.com/andingding-blog/p/8717936.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Mac上安装IntelliJ IDEA

在Mac上安装IntelliJ IDEA http://www.jetbrains.com/idea/documentation/ 入门视频 这篇文章旨在介绍如何在Mac系统上安装IntelliJ IDEA&#xff0c;至于IntelliJ IDEA的介绍和使用方法&#xff0c;大家另行查阅&#xff0c;本篇的文章不再详细阐述。 简短解说&#xff0c;I…

行内元素,块级元素,各自特点及其相互转化

作为一名小前端&#xff0c;块级元素、行内元素用了几千几万次&#xff0c;除了“块级独占一行&#xff0c;行内不独占”之外&#xff0c;对细节属性的了解十分匮乏&#xff0c;今天做以部分属性的测试和阐述。 一、 对物理属性的支持 元素类别widthheightpaddingmargin是否独…

从RSS Feed和YQL创建数据表

Yahoo Query Language&#xff08; YQL &#xff09;是一种查询语言&#xff0c;例如SQL。 使用YQL&#xff0c;我们可以跨Web服务 查询 &#xff0c; 过滤和联接数据。 YQL也可以阅读RSS feed。 响应可以是JSON或XML。 雅虎提供了一个YQL控制台&#xff0c;用于调试 &…

Qt之QSS(Q_PROPERTY-自定义属性)

版权声明&#xff1a;进步始于交流&#xff0c;收获源于分享&#xff01;纯正开源之美&#xff0c;有趣、好玩、靠谱。。。作者&#xff1a;一去丶二三里 博客地址&#xff1a;http://blog.csdn.net/liang19890820 目录(?)[] 简述 在Qt之QSS&#xff08;Q_PROPERTY-原始属性&a…

python print error 空_python笔记37:10分钟掌握异常处理,再也不担心程序挂了

主要内容&#xff1a;小目标&#xff1a;异常处理主要内容&#xff1a;错误与异常&#xff0c;try_except语句对于撸代码的程序员来说&#xff0c;程序运行中出现问题是常见的现象&#xff1b;实际学习与工作中&#xff0c;我们会花很大的精力去解决各种问题&#xff1b;1. 程序…

contenteditable元素的placeholder输入提示语设置

在某些情况下&#xff0c;textarea是不够用的&#xff0c;我们还需要显示一些图标或者高亮元素&#xff0c;这就需要用富文本编辑器&#xff0c;而富文本编辑器本质上是HTML元素设置了contenteditable。 然后可能需要像input、textarea有placeholder的输入提示语&#xff0c;但…

css 浮动和清除浮动

在写页面布局的过程中&#xff0c;浮动是大家经常用的属性。在好多的排版布局中都是用的的浮动比如说下面这些地方都是应用到了浮动。 在我学习浮动的时候可是熬坏了脑筋&#xff0c;在这里我分享一下我对浮动这块知识的总结。 一、浮动的定义 使元素脱离文档流&#xff0c;按…

Java Code Geeks和Packt提供的Hadoop书籍赠品

亲爱的极客&#xff0c;由于参与度很高&#xff0c;并且为了有机会赢得尽可能多的Hadoop粉丝&#xff0c;我们决定将竞赛延长一个星期&#xff0c;直到下周二。 各位极客&#xff0c; 赠品在Java Code Geeks上继续。 我们很高兴地宣布&#xff0c;我们再次与Packt Publishin…

【转】 差分约束系统详解(转化为最短路) (概念)

---恢复内容开始--- 转自&#xff1a;http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 差分约束系统中&#xff1a; 如果求未知数的最大值&#xff0c;那么按小于等于建图后求最短路即可。&#xff08;因为求最短路是由无穷向下约束而得到的&#xff0c;所以得到…

【HTML基础】表格和表单

本次博客的主要内容如下&#xff1a; meta和link表格表单 meta和link meta meta的属性有两种&#xff1a;name和http-equiv。 name属性主要用于描述网页内容&#xff0c;对应与网页内容。 1.关键字&#xff0c;当搜索引擎在爬取内容的时候&#xff0c;会根据关键字判断&a…

python json 不好用_Python之json使用

一、概念json是一种通用的数据类型&#xff0c;任何语言都认识接口返回的数据类型都是json长得像字典&#xff0c;形式也是k-v { }其实json是字符串字符串不能用key、value来取值&#xff0c;要先转成字典才可以格式如下&#xff1a;{"error_code": 0,#要使用双引号&…

jstack命令(Java Stack Trace)

转&#xff1a;http://blog.csdn.net/fenglibing/article/details/6411940 JDK内置工具使用 一、javah命令(C Header and Stub File Generator) 二、jps命令(Java Virtual Machine Process Status Tool) 三、jstack命令(Java Stack Trace) 四、jstat命令(Java Virtual Machine …

链式存储mysql_链栈:栈的链式存储结构

前面讲完了栈的顺序存储结构&#xff0c;我们现在来看看栈的链式存储结构&#xff0c;简称为链栈。链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针。栈是用栈顶来做插入和删除操作&#xff0c;那么对于链栈的栈顶放在链表的头部还是尾部呢&#xff1f;单链…

树状数组 学习笔记

树状数组可以用来求区间元素的和。与前缀和做法不同&#xff0c;它支持值的修改。比如说&#xff0c;现在我有一个数列a&#xff0c;要求你维护这个数列&#xff0c;使其支持两个操作。1.改变数列第k项的值2.查询从第i项到第j项的总值暴力做法总是过不了所有点的&#xff0c;如…

iOS动画-从UIView到Core Animation

首先&#xff0c;介绍一下UIView相关的动画。 UIView普通动画&#xff1a;[UIView beginAnimations: context:];[UIView commitAnimations]; 动画属性设置&#xff1a; 1 //动画持续时间2 [UIView setAnimationDuration:(NSTimeInterval)];3 //动画的代理对象4 …

201621123055《JAVA程序设计》第三周学习总结

1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词。 答&#xff1a;类、对象、关键字等。1.2 用思维导图或者Onenote或其他工具将这些关键词组织起来。(注&#xff1a;首次使用&#xff0c;不太会用软件&#xff09; 2. 书面作业 1.以面向对象方式改造数据结构…

通过运行示例从WSO2 ESB开始

我最近加入了一个新任务&#xff0c;在该任务中&#xff0c;我们必须基于WSO2工具栈实施ESB解决方案。 尽管我熟悉ESB的大多数概念以及其他一些实现&#xff08;例如Mule ESB &#xff09;&#xff0c;但这是我第一次必须使用WSO2 ESB 。 幸运的是&#xff0c;可以找到很多文档…

爬虫(十二):scrapy中spiders的用法

Spider类定义了如何爬去某个网站&#xff0c;包括爬取的动作以及如何从网页内容中提取结构化的数据&#xff0c;总的来说spider就是定义爬取的动作以及分析某个网页 工作流程分析 以初始的URL初始化Request&#xff0c;并设置回调函数&#xff0c;当该request下载完毕并返回时&…

position:fixed 兼容浏览器低版本

项目中遇到的坑&#xff0c;写篇博客做个笔记纪念下&#xff0c;position: fixed一般来说都兼容各个浏览器&#xff0c;但是要兼容浏览低版本问题&#xff0c;就得用-webkit-transform: translateZ(0);这段代码了。 项目中用到position: fixed;z-index: xxx;的时候&#xff0c;…

监控java_Java应用程序监控JavaMelody

JavaMelody是运行在Java Web容器中&#xff0c;用来监控Java内存和J服务器CPU使用情况&#xff0c;用户Session数量&#xff0c;JDBC连接数&#xff0c;和http请求、sql请求等的执行数量&#xff0c;平均执行时间&#xff0c;错误百分比等。图表可以按天&#xff0c;周&#xf…