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…

mysql sohu_【MySQL中间件之SOHU-DBProxy】

SOHU-DBProxy是由 搜狐 数据库团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.3版本的基础上&#xff0c; 修改了大量bug&#xff0c;添加了很多功能特性。现在已经在sohu的多个业务线上使用DBProxy 兼容 MySQL 协议&#xff0c;可以用…

JavaFX:太空侵略者在175 LOC以下

使用当前版本的API&#xff0c;我对太空侵略者的评价不到175个LOC。 我的API中有很多“功能接口”&#xff0c;可以使用JavaFX 8&#xff08;例如SpriteProvider和CollisionHandler&#xff09;将其转换为Lambda表达式。 这将使代码更好&#xff0c;更短。 我可能还可以通过捆绑…

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

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

mysql断开同步并记录位置_数据库同步自动断开问题的处理

堡垒机的实施过程中&#xff0c;因为做了双机&#xff0c;所以要对两台堡垒机进行数据库的主从同步和HA配置。在部署完mysql主从同步以后&#xff0c;发现同步会有中断的现象。中断表现为Slave_IO_Running: YesSlave_SQL_Running: NoReplicate_Do_DB:Replicate_Ignore_DB:Repli…

[NOIP2016提高组]换教室

题目&#xff1a;洛谷P1850、UOJ#262、BZOJ4720、Vijos P2005。 题目大意&#xff1a;有n个时间段&#xff0c;第i个时间段只能在教室$c_i$上课&#xff0c;另一个上这门课的教室在$d_i$。现在你最多可以进行m次申请&#xff0c;对于第i个时间段的申请如果成功&#xff0c;那么…

从RSS Feed和YQL创建数据表

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

background-image使用svg如何改变颜色

结论 在我多番测试之后&#xff0c;才发现background-image使用svg&#xff0c;改变颜色根本做不了。 分析 当svg图片被使用成background-image&#xff0c;颜色的设置需要在svg内部才能生效。在外部CSS设置颜色样式&#xff0c;却是无效&#xff0c;这其实可以从CSS选择器得到…

NOIP 2012 Day2

tags: 扩展欧几里得二分答案查分倍增二分答案贪心NOIP categories:信息学竞赛总结同余方程借教室疫情控制 同余方程 Solution 首先同余式可以转化为等式.\[ax\equiv 1\mod b\Leftrightarrow axby1\]   根据扩展欧几里得定理, 对于式\[axbyk(a,b),k\in \mathbf{R}\]一定存在整…

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. 程序…

在URL参数中传递复杂对象

假设您要传递原始数据类型&#xff0c;例如复杂的Java对象 java.util.Data&#xff0c;java.lang.List&#xff0c;泛型类&#xff0c;数组以及通过URL参数所需的所有内容&#xff0c;以便在页面加载后在任何网页上预设默认值。 共同的任务&#xff1f; 是的&#xff0c;但是可…

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

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

CF 961E Tufurama

JYZdalao上课讲了这道题&#xff0c;觉得很好可做 其实也是一道理解了就水爆了的题目 把题意抽象化&#xff0c;可以发现题目求的满足 i<ja[i]>ja[j]>i的i&#xff0c;j对数。由于i&#xff0c;j顺序问题&#xff0c;可以在不考虑i&#xff0c;j顺序的情况下将ans>…

使用JCA的密码术–提供者中的服务

Java密码体系结构&#xff08;JCA&#xff09;是一个可扩展的框架&#xff0c;使您能够使用执行加密操作。 JCA还促进实现独立性&#xff08;程序不应该在乎谁提供加密服务&#xff09;和实现互操作性&#xff08;程序不应该与特定加密服务的特定提供者联系在一起&#xff09;。…

IE浏览器支持响应式网站设计

目前响应式网站设计比较流行, 下面是摘自百度百科有关响应式设计的定义. 响应式网站设计是一种网络页面设计布局&#xff0c;其理念是&#xff1a;集中创建页面的图片排版大小&#xff0c;可以智能地根据用户行为以及使用的设备环境进行相对应的布局。 但是, 响应式设计并不能原…

python循环for不从零开始_Python-多处理-巨大的for循环

下午好&#xff0c;我对Python还是很陌生&#xff0c;我必须解决一个需要尝试数十亿个假设的问题...更具体地说&#xff0c;我需要迭代440个元素的列表&#xff0c;但我需要这样做8次...(是的&#xff0c;我知道OS迭代的次数完全是疯狂的。我的机器相当不错&#xff0c;所以我想…

Bridge Across Islands POJ - 3608 凸多边形间最小距离/旋转卡壳

旋转的部分始终感觉有点别扭。。后来发现是因为叉积顺序为负。。 所以让三角形面积逐渐变大实际上就是让三角形面积变小&#xff08;绝对值意义上的&#xff09;&#xff0c;这样就是让高变小了。。 至于为什么要选最下和最上。。应该是为了满足两条线始终可以生成所有多边形间…

绑定到JSON和XML –处理集合

EclipseLink JAXB&#xff08;MOXy&#xff09;的优势之一是能够通过一组元数据将对象模型映射到JSON和XML。 一个弱点是您需要在JSON键或XML元素上折衷集合属性。 我很高兴地说这个问题已经在EclipseLink 2.5&#xff08;和EclipseLink 2.4.2&#xff09;中得到解决&#xff0…

【WIP】Bootstrap 基础

创建: 2017/09/28 更新: 2017/10/14 标题加上【WIP】转载于:https://www.cnblogs.com/lancgg/p/8281714.html