c 给定字符串中查找_面试 | 查找类算法精析

点击上方蓝字设为星标b8adf92631ef7303c896407384abe264.png

每周一、三、五上午 8:30 准时推送

下面开始今天的学习~

06f0f3d62218994ff30d03a34e81dda0.png

d941bba0f25bbfb2a637ef8edf7cb731.png

前言

查找,是使用计算机处理问题时的一个最基本的任务,因此也是算法面试中非常常见的一类问题。很多算法问题的本质,就是要能够高效使用查找。LeetCode 中有很多问题都会用到集合和字典(C++ 中为 set 和 map , Python 中为 set 和 dict) 这两种数据结构,今天我们将会对 LeetCode 这类问题进行总结,所有代码采用 Python 实现,并可以在  力扣(LeetCode)里 AC。

灵活选择键值

454. 四数相加 II

题目描述

给定四个包含整数的数组列表 A,B,C,D,计算有多少个元组(i,j,k,l),使得 A[i] + B[j] + C[k] + D[l] = 0。

为了使问题简单化,所有的 A,B,C,D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。

例如:

6076e0e04c14dda0c1a0d239a65d9425.png

解题思路

  • 暴力解法,时间复杂度 O(n^4)

  • 将 D 中的元素放入查找表,时间复杂度 O(n^3)

  • 将 A + B 的每一种可能放入查找表,然后 两重循环对在查找表中寻找是否存在 -(C[i] + D[i]),时间复杂度为 O(n^2)。两数相加的和作为键值

我采用第三种方法实现

代码实现

5a89673c9d2894a7a92e5849a6011d3a.png

49. 字母异位词分组

题目描述

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

8fa6c6c787109e6bb95ed1887d4c9b22.png

说明:

  • 所有输入均为小写字母。

  • 不考虑答案输出的顺序。

解题思路

对字符串数组中每一个字符串进行排序,之后如果遇到相等的字符串,就说明该字符串对应的排序前的字符串是字母易位词。找字母易位词的过程用哈希表,每当出现一个新的字母易位词,就往 ret 中添加一个 list,同时往哈希表中添加该字母易位词,并将该字母易位词在哈希表中的 value 值存成该 list 的索引值;出现哈希表中已经存在的字母易位词,直接往对应索引的 list 中添加即可。排序后的字符串作为键值

代码实现

7b6bd4aa11b47922cabee240ea343060.png

447. 回旋镖的数量

题目描述

给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k),其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。

找到所有回旋镖的数量。你可以假设 n 最大为 500,所有点的坐标在闭区间 [-10000, 10000] 中。

示例:

fe7b54fc91f4fade8cd3b929379589ee.png

解题思路

  • 暴力解法:三重循环枚举所有的可能性。 时间复杂度为:O(n^3)

  • 使用查找表:观察到 i 是一个 “枢纽”,对于每个点i,遍历其余点到i的距离 对于每个枢纽 i,计算它到其它点j的距离,并将距离作为键存入字典 dict 中,value 为距离的个数。时间复杂度为:O(n^2)。 距离作为键值

代码实现

5b502c97730506b95a16c71e5fe2e94c.png

149. 直线上最多的点数

题目描述

给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。

6669a56fec9f5acaf3e2100b2f311b38.png

解题思路

两点可以确定一条直线,那么选择固定一个点,求其他点与固定点的斜率,如果斜率相同,那么斜率相同的点在同一条直线上。同时要考虑,斜率可能为无穷大,也有可能两个点为同一个点。键值应该为:斜率。

代码实现

0acad8ec0cd6265ae092ba8f1f2ed01c.png

查找表和滑动窗口

219. 存在重复元素 II

题目描述

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。

0c317887783efb7944822bacbb9be27d.png

解题思路

结合使用滑动窗口和查找表,不断查找当前滑动窗口内有没有重复值。我们通过建立一个 record 查找表,表中存的是窗口中的数,另外我们要注意的是,当窗口的大小>k的时候,我们要移除 record 中最左边的元素(保证我们窗口中有 <= k 个数)

代码实现

9707f0ebea01667c1ccbbd69d767351a.png

220. 存在重复元素 III

题目描述

给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums[i] 和 nums[j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。

ca9d6d357f430ceae259e551292ef918.png

解题思路

也是查找表与滑动窗口的思路:维持滑动窗的大小最大为 k,遍历每一个元素 nums[i],在活动窗口中寻找 |one-nums[i]| < t,即窗口中的元素范围为:[one-t…one+t] 之间

代码实现

b700eaa5772e51cccf2be16abe8f75cc.png

总结

我们知道在准备面试的时候,刷算法题是一种捷径,特别是刷力扣,但是不能一味的刷题,我们需要总结和思考,对于一些相似的题目我们应该多想想他们的思想,其实很多题的解题思路都是相近的。

7154b8748c873b71dd3d5b3403ec4298.png

本文作者:军旗

编辑&版式:霍霍

声明:本文归 “力扣” 版权所有,如需转载请联系。

7c443217de778e4c4003dc77d987e1cc.gif

2cf0ff59ba3d184c2fa2231ae82081ae.png

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

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

相关文章

LInux安装MySQL5.7.24详情

安装包下载 MySQL 的官网下载地址&#xff1a;http://www.mysql.com/downloads/ 我安装的是5.7版本 第二步&#xff1a; 选择&#xff1a;TAR (mysql-5.7.24-el7-x86_64.tar) 点击下载 然后点击 No thanks, just start my download. 进行下载。 检查是否安装过mysql [rootmas…

正确设置JUnit测试名称

寻找好名字是手工软件的挑战之一。 您需要随时随地找到它们-类&#xff0c;方法&#xff0c;变量&#xff0c;仅举几例。 但是&#xff0c;什么使名字成为好名字呢&#xff1f; 引用Oncle Bob的话&#xff1a;“三件事&#xff1a;可读性&#xff0c;可读性和可读性&#xff01…

html5储存类型特点,避免踩雷!你不得不知的 HTML5 “新”特性

什么是 HTML5HTML的发展历程如下&#xff1a;产生于1990年1997年 HTML4 出现&#xff0c;成为互联网开发的标准2008年&#xff0c;HTML5正式出现&#xff0c;2002年趋于稳定HTML在发展过程中&#xff0c;HTML4.01 版本维持了长达十年的时间&#xff0c;之后 HTML5 标准才出现&a…

How to show out three rows from the same databand On A4?

How to show out three rows from the same databand On A4? QuotePost by DoraHuang Tue Mar 13, 2018 4:13 am Hello, there are few questions to ask,1. How to present a report from one DataBand to show out three info?My questions like the picture:it is A4 pag…

rds基于什么开发_IaaS、PaaS、SaaS、DaaS都是什么?现在怎么样了?终于有人讲明白了...

导读&#xff1a;本文将详细科普云计算的概念、云服务的发展现状&#xff0c;并逐一介绍各种云服务模式&#xff08;IaaS、PaaS、SaaS、DaaS&#xff09;&#xff0c;建议收藏&#xff01;01 云计算的概念云是一种服务&#xff0c;可以像使用水、电、煤那样按需使用、灵活付费&…

[转]css实现左侧宽度自适应,右侧固定宽度

原文地址:https://segmentfault.com/a/1190000008411418 页面布局中经常用会遇到左侧宽度自适应&#xff0c;右侧固定宽度&#xff0c;或者左侧宽度固定&#xff0c;右侧自适应。总之就是一边固定宽度&#xff0c;一边自适应宽度。 一般固定宽度是导航栏&#xff0c;自适应宽度…

Java 8发布了! — Lambdas教程

为了庆祝几分钟前发布的Java 8的发布&#xff0c;我正在发布Java 8 Lambdas教程的草稿版本。 这是学习Streams API的一种很好的可视化方法&#xff0c;从第一天开始&#xff0c;它将帮助您开始在自己的应用程序中利用lambda。本文计划在下一期Java Magazine发行中发表&#xff…

redis 学习(18)-- AOF

redis -- AOF 什么是 AOF 通过日志方式将redis中的写命令进行日志记录&#xff0c;保存在硬盘文件中。 日志记录的实质是将写命令写在硬盘的缓冲区中&#xff0c;再根据相关策略把数据刷新到磁盘中。 当redis服务器启动时候&#xff0c;执行硬盘中的日志文件以恢复redis中的数据…

重启IIS和SqlServer的命令行

在WEB开发中经常需要重启IIS,每次打开IIS来操作很麻烦&#xff0c;所以我干脆就在桌面新增了一个CMD文件&#xff0c;内容如下&#xff1a;&#xff08;SQL Server占的内存不少&#xff09;net stop iisadmin /ynet start w3svc net stop mssqlservernet start mssqlserver每次…

精简SWT FormLayout的用法

出于对效率的追求&#xff0c;我最近重新考虑了SWT FormLayout的可用性。 尽管就灵活性而言&#xff0c;它是我最喜欢的核心布局之一&#xff0c;但我不得不认识到&#xff0c;大多数同事都不情愿地使用它。 考虑到面部反应&#xff0c;建议将其建议用于适当的任务有时实际上会…

vue 启动时卡死_十分钟浅入Vue 原理

vue原理引用众所周知vue是一个MVVM 渐进式框架&#xff0c;MVVM是vue的设计模式&#xff0c;在vue框架中数据会自动驱动视图。1、MVVM设计模式 ​ 解释View是视图&#xff0c;就是DOM&#xff1b;对应视图也就是HTML部分--代表UI组件&#xff0c;它负责将数据模型转化成UI展现出…

centos7.3 安装 mysql-5.7.13

系统环境: [rootlocalhost ~]# cat /etc/RedHat-release CentOS release 6.7 (Final)[rootlocalhost tools]# uname -aLinux localhost 2.6.32-573.22.1.el6.x86_64 #1 SMP Wed Mar 23 03:35:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux[rootlocalhost tools]# 软件准备:[root…

GARFIELD@12-20-2004

克已复礼为仁转载于:https://www.cnblogs.com/rexhost/archive/2004/12/20/79502.html

Java 8的功能基础

Java 8彻底改变了Java。 它很可能是过去10年中最重要的Java版本。 有很多新功能&#xff0c;包括默认方法&#xff0c;方法和构造函数引用以及lambda&#xff0c; 仅举几例 。 更有趣的功能之一是新的java.util.stream API&#xff0c;正如Javadoc所述&#xff0c;该API支持 …

JSON.stringify()和JOSN.parse()

JSON.stringify()跟JSON.parse() 终于把这两个方法搞清楚了&#xff01;&#xff01;&#xff01; JSON.tringify()&#xff1a;把一个json数据转化成JSON string JSON.stringify({uno:1,dos:2},null,\t)"{"uno": 1,"dos": 2}"JSON.stringfy({u…

查表法实现反正切_关于python实现CRC32的应用和总结

关于python实现CRC32的应用和总结目前使用的Crc计算包含Crc32和Crc32mpeg2两种计算方式。循环冗余检验 CRC 差错检测技术能够证明数据是完整的&#xff0c;是无差错的&#xff08;只是非常近似的认为是无差错的&#xff09;。保证数据可靠性传输的方法包含如下&#xff1a;检验…

bootstrap html5 表单验证,基于Bootstrap+jQuery.validate实现表单验证

这大概是一种惯例&#xff0c;学习前台后台最开始接触的业务都是用户注册和登录。现在社会坚持以人为本的理念&#xff0c;在网站开发过程同样如此。User是我们面对较多的对象&#xff0c;也是较核心的对象。最开始的用户注册和登陆这块&#xff0c;也就尤为重要。用户注册和登…

JavaFX技巧1:可调整大小的Canvas

在使用FlexGanttFX时&#xff0c;我不得不处理很多JavaFX Canvas节点。 我正在使用它在时间轴上呈现活动。 甘特图中的每一行都是一个Canvas节点。 用户可以选择单独调整每行的大小。 因此&#xff0c;我不得不找出调整画布大小的最佳方法&#xff0c;这种现成的方法无法调整大…

12日疯人认证百度云_12月15日上海实习汇总(百度、美图、哔哩哔哩等)

上海实习实习汇总 | 实习内推 | 寒假实习博世 采购助理Job Title: 采购部实习生Job Description:1. Create Purchase Decision (PD), initiate internal approval workflow.2. Maintain basic data in SAP, SupplyOn, SRM, internal system Pilum .etc.3. Issue purchase order…

15必须阅读Java 8教程

Java 8于上个月发布&#xff0c;其中充满了新功能和幕后优化。 互联网在覆盖所有这些新增加的方面&#xff08;包括好的和坏的&#xff09;一直做得很好。 我认为最好汇总一下我们认为是最好的一些教程&#xff0c;以帮助您快速掌握最新信息和需要了解的知识。 Java 8新功能列…