算法
文章平均质量分 77
秦哈哈
前端/Python/ROS/语音识别/人工智能/机器学习
展开
-
算法通关村第十五关——从40亿个数中产生一个不存在的数的处理方法
给定一个输入文件,包含40亿个非负整数,请设计一个算法,产生一个不存在该文件中的整数,假设你有1GB的内存来完成这项任务。存储的不是这40亿个数据本身,而是其对应的位置。本题不用写代码,能把方法过程说清楚就可以。原创 2023-09-13 21:51:20 · 235 阅读 · 0 评论 -
算法通关村第十五关——位运算在查找重复元素中的妙用
大部分算法默认给定的数据量都比较小,只有几个或者几十个元素,但是如果将数据量提高到百万甚至几十亿,那么处理逻辑就会发生很大差异。在海量数据中,普通数据结构都无效了,因为内存空间放不下,常规的递归、排序、回溯、贪心和动态规划等思想也无效了,执行都会超时。81。原创 2023-09-13 20:55:08 · 164 阅读 · 0 评论 -
算法通关村第十四关——解析堆在数组中找第K大的元素的应用
给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。:按照“找最大用小堆,找最小用大堆,找中间用两个堆”,这道题用最小堆来解决,构造一个大小只有K的最小堆。,比如找第4大的数,先让前四个入堆,之后继续遍历与堆顶元素进行比较,比堆顶元素大才能入堆否则不行。新元素的插入只是替换根元素,然后重新构造最小堆,完成之后的根元素就是第4大的元素。原创 2023-09-13 20:34:16 · 203 阅读 · 0 评论 -
算法通关村第十四关——原来这就是堆
关于堆的问题总结为口诀:查找:找大用小,大的进;找小用大,小的进。就是找第K大的数,就用小顶堆,后续数据只有比根元素大的时才允许进入堆。如果时找第K小的数,就用大顶堆,后续数据只有比跟元素小才能进堆。排序:升序用小,降序用大。升序用小顶堆,从根节点开始到叶子节点逐渐增大,降序用大顶堆,从根节点开始到叶子节点逐渐减小。原创 2023-09-13 19:51:15 · 41 阅读 · 0 评论 -
算法通关村第十三关——幂运算问题解析
幂运算为常见的数学运算,形式为a^b,其中a为底数,b为指数,力扣中,幂运算相关的问题主要是判断一个数是不是特定正整数的整数次幂,以及快速幂的处理。原创 2023-09-10 15:01:00 · 557 阅读 · 0 评论 -
算法通关村第十三关——溢出问题处理模板
溢出问题是面试当中输出涉及到数字的一个需要特别注意的地方,典型的题目有三个:数字反转,将字符串转成数字和回文数。原创 2023-09-05 22:03:47 · 296 阅读 · 0 评论 -
算法通关村第十二关——字符串反转问题解析
字符串反转是关于字符串算法里的重要问题,虽然不是太难,但需要考虑到一些边界问题。本篇文章就对几道字符串反转题目进行分析。原创 2023-09-02 20:41:45 · 309 阅读 · 0 评论 -
算法通关村第十二关——不简单的字符串转换问题
字符串是我们在日常开发中最常处理的数据,虽然它本身不是一种数据结构,但是由于其可以包含所有信息,所以通常作为数据的一种形式出现,由于不同语言创建和管理字符串的方式也各有差异,因此针对不同语言特征又产生了很多问题。常见的字符串转换题目,也就是在大小写字母、数字、特殊字符这几种类型之间进行。但是在转换过程中需要处理几种特殊情况,比如当前元素能否进行转换,如果是字符串转换为数字还要考虑当前元素是不是数字,转换之后是否会溢出等。原创 2023-08-31 16:38:38 · 388 阅读 · 0 评论 -
算法通关村第十一关——位运算实现加减乘除
在计算机中,位运算的效率比加减乘除效率更高。原创 2023-08-28 15:06:15 · 283 阅读 · 0 评论 -
算法通关村第十一关——搞清位运算
很多人都记不清源码、反码和补码的区分,都是二进制,其实记忆起来很简单,分为正数和负数来记。正数的原码、反码和补码都是一样的,负数的原码符号位为1,反码是在原码的基础上进行改变:保持符号位不变,其他位取反;补码是在反码的基础上:反码的末位加1。原创 2023-08-27 13:02:08 · 407 阅读 · 0 评论 -
算法通关村第十关——快速排序算法
快速排序的是将分治法运用到排序问题的典型例子。基本思想:是通过随机标记一个pivot元素将含有n个元素的序列划分为左右两个子序列left和right,其中left的元素都比pivot小,right的元素都比pivot大,然后再次对left和right分别执行快速排序,这样将左右两个子序列排列完后,整个序列也就是有序的了。但是当数组中包含时,会出现性能下降的现象,此时我们可以使用三路快速排序算法。原创 2023-08-26 17:01:25 · 238 阅读 · 0 评论 -
算法通关村第九关——中序遍历与搜索树
二叉搜索树按照中序遍历正好是一个递增序列。这两棵树的中序遍历分别是和,都是二叉搜索树。原创 2023-08-22 20:01:12 · 787 阅读 · 1 评论 -
算法通关村第九关——透彻理解二分查找
常见的查找算法有顺序查找、二分查找、插值查找、斐波那契查找、树表查找、分块查找、哈希查找等。如果进行归类,那么二分查找、插值查找(一种查找算法)以及斐波那契查找都可以归为(大类)。而插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。这些算法中最重要的就是和。xarrr−arrikey−arri])r−i其中,i和r分别代表数组的第一个和最后一个索引,key代表待查找的元素。原创 2023-08-22 18:56:06 · 324 阅读 · 0 评论 -
算法通关村第八关——轻松搞定二叉树的深度和高度问题
从局部到整体递推分情况讨论,明确递归终止条件,得出完整的递归逻辑,如果想验证的话,就从整体到局部画图推演。原创 2023-08-19 15:39:22 · 127 阅读 · 0 评论 -
算法通关村第八关——轻松搞定翻转二叉树
观察图中翻转前后的二叉树,我们不难发现,翻转过程中,只需要把每一个节点的左右子节点交换以下就可以了,但是我们应该以什么样的顺序来遍历二叉树呢?如果是后序遍历,就先交换叶子结点,如果当前遍历到的节点的左右子树均已翻转,就只需要交换两棵子树位置,就可以完成二叉树的翻转。也可以实现翻转,先将二叉树的根节点放入队列,然后从队列中拿出节点,交换节点的左右子节点,如果交换后的左右子节点不为空,则将左右子节点放入队列,再拿出节点,交换左右子节点,二叉树的经典算法问题主要考察的还是对二叉树前中后序三种遍历方法的掌握。原创 2023-08-18 15:51:20 · 150 阅读 · 1 评论 -
算法通关村第七关——递归和迭代实现二叉树前中后序遍历
迭代主要是模拟一个系统栈出来,将节点压入栈中,再取出。前中序遍历容易理解,后序遍历较为复杂,涉及到反转操作。只要调整前序遍历的左右顺序就可以得到后序遍历。反转后的后序遍历与前序遍历相比就是左右顺序不同原创 2023-08-14 20:09:35 · 306 阅读 · 0 评论 -
算法通关村第六关——原来如此简单
这道题也是层次遍历的变种题,我们思考一下,既然需要我们找到每一层最右边节点的值,那在我们遍历每一层节点的时候,我们已经将这层节点放入队列,是不是只需要判定一下。遍历当前层次的节点时,如果这个节点还有子节点,就将其加入队列中;如果当前层次遍历完了,就将队列的长度重新指向新的队列长度。我们先看一下基础的层次遍历题,力扣102题:给你一个二叉树,请你返回其按层序遍历得到的节点值。就是从根节点开始,先访问根节点下面一层全部元素,再访问之后的层次,直到访问完二叉树的叶子节点那层。原创 2023-08-14 14:53:30 · 90 阅读 · 0 评论 -
算法通关村第六关——如何使用中序和后序来恢复一颗二叉树
Tree:表现得是一种,为nn≥0个节点构成的有限集合,当n=0时,称为,对于任一颗非空树(n>0),它具备以下性质: 树中有一个根(root)节点,用r表示 其余节点可分为m(m>0)个的有限集T1T2...Tm,其中每个集合本身又是一棵树,称为原来树的Subtree。子树不相交;除了根结点外,每个结点有且仅有一个父结点;一颗N个结点的树有N-1条边。原创 2023-08-08 16:35:08 · 325 阅读 · 0 评论 -
算法通关村第五关——n数之和问题解析
首先,三层循环想都不要想!时间复杂度太高了,直接放弃。比较好的办法就是“排序+双指针”。先将数组升序排序,之后固定一位元素,再用两数之和思想找剩下的两个元素。我们可以使用哈希表法来将寻找第二个数的时间复杂度降低。原创 2023-08-08 10:43:05 · 241 阅读 · 0 评论 -
算法通关村第五关——HashMap和队列问题分析
Hash也称为散列。就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。假设数组array存放的是1到15这些数,现在要存在一个大小是7的Hash表中,存储的位置计算公式是:对于如何取值,比如要取13,我们同样利用计算存储位置的计算公式13 % 7 = 6,我们访问array[6]13是在的,返回true。如果想看20在不在哈希表里,操作同上20 % 7 = 6,访问array[6],没有20,返回false。通过上面的例子可以发现有一些数据被存放到同一个位置了。原创 2023-08-06 16:53:32 · 172 阅读 · 0 评论 -
算法通关村第四关——最大栈问题解析
弹出栈顶元素时我们同步将辅助栈中栈顶元素弹出,这样就可以保证只要辅助栈不为空,辅助栈里的栈顶元素始终都是当前栈的最大值。为了在最短事件内获得栈中的最大值,就不应该在执行。存储到另外一个辅助栈中,这样在后面的操作过程中只要栈顶元素为。的过程中就应该计算好当前栈中的最大值。不会被弹出,在操作过程中的任意一个时刻,只要。在最大栈的问题上,除了实现普通栈拥有的方法。:基于栈后进先出的特点,那么在将一个数。在栈顶,那么栈里的元素就一定是。压入栈中时,如果栈里已经存在。入栈时,把当前栈中的最大值。原创 2023-08-06 10:29:45 · 222 阅读 · 0 评论 -
算法通关村第四关——如何基于数组实现栈
具有一定操作约束的线性表,只在一端(栈顶,Top)做插入(Push)、删除(Pop),不可操作的一端称为栈底(Bottom)。后进先出(Last In First Out, LIFO),若栈中没有元素则称为空栈。一维数组栈顶单链表链栈栈可以用于表达式求值,如后缀表达式求值、中缀表达式求值、函数调用及递归实现、深度优先搜索、回溯算法等push(E)Epop()peek()empty()在设计栈时,不管用数组还是链表,都需要实现上面几个方法。原创 2023-08-04 21:50:42 · 117 阅读 · 0 评论 -
算法通关村第三关——双指针的妙用
所谓的双指针其实就是两个变量,不一定真的是指针。双指针可以分为快慢双指针(以不同速度向同一边走)、对撞双指针(从两边向中间走)、相反双指针(从中间向两边走)适用场景:处理数组、字符串问题,比如删除有序数组中的重复项、元素奇偶移动、数组轮转、数组区间、字符串空格替换等。原创 2023-08-03 14:59:09 · 132 阅读 · 0 评论 -
算法通关村第三关——不简单的数组增删改查
对数组进行CRUD(增删改查)尤其要注意边界条件。原创 2023-07-31 12:59:09 · 108 阅读 · 0 评论 -
算法村通关第二关——单链表指定区间反转问题解析
在进行反转的过程中,难点就是想清楚结点指针该怎么变化,搞清楚这点,反转就容易理解了。原创 2023-07-28 21:09:06 · 120 阅读 · 0 评论 -
算法通关村第二关——终于学会链表反转了
链表反转之所以重要,是要为其涉及到结点的增加、删除等多种操作,可以有效考察思维能力和代码驾驭能力,此外它也是很多题目的的基础,比如指定区间反转、链表K个一组反转。有两种较好的解法,带头结点和不带头结点(迭代法)。原创 2023-07-27 19:44:00 · 50 阅读 · 0 评论 -
算法通关村第一关——链表中环的问题
力扣141,给定一个链表,判断单向链表中有无环,进一步确定环的入口。原创 2023-07-27 15:46:22 · 67 阅读 · 0 评论 -
算法通关村第一关——链表经典问题之双指针专题笔记
快慢指针真的是一种简单又很有效率的方法,还可以将其应用到很多链表题目当中。以后刷算法题或者面试时,遇到链表的题目可以优先考虑一下。原创 2023-07-26 10:15:06 · 80 阅读 · 0 评论 -
算法通关村第一关——链表青铜挑战笔记
实现元素的插入和删除都需要考虑结点的两个指针指向的改变,基于单向链表的插入和删除再进行双向列表的插入和删除就比较容易理解了,不再赘述。:和单向链表一样都是通过指针将一个个结点连接起来,和单链表不同的地方在于单链表每个结点的指向只有一个,双向链表每个结点都有两个指针,:结点可以认为是一个数据+指向这个数据的指针构成的,多个这样的结点构成了链表,而位于单链表首位的结点称为头结点。向链表中插入新的元素,需要考虑三种情况,链表的头部、身部、尾部。头部插入元素,只需创建一个新的结点再将其连接到原来的链表即可。原创 2023-07-24 18:58:43 · 50 阅读 · 0 评论 -
【数据结构】算法基础学习笔记--数据结构
算法基础学习笔记--数据结构。原创 2022-09-01 09:24:40 · 542 阅读 · 0 评论