自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 算法学习(23)普通二叉树的最近公共祖先问题

注意:根据代码随想录所讲,当root本身就是p或者q时,为什么不用单独分出来写代码,因为在向下调用的截止条件里已经写了,当root等于p或者q时,会向上返回root,所以不用再单独写了。4、在写中的代码的时候就是会出现上面四种情况,总之,就是不断把p或者是q不断向上返回,直到遇到最近公共祖先,再把公共祖先不断向上返回,最后返回到二叉树的根结点,输出结束。5、所以整个过程就是在做后序遍历,只不过在后序遍历的时候返回了一些值,p,q,最近公共祖先,这三个变量值在不同的时间被返回了。

2024-03-29 17:37:17 471 1

原创 算法学习(19)理解递归和二叉树的遍历

递归不一定需要显式地写return。隐式return的情况是:如果执行到函数的结尾,就会自动返回上一级。(这跟正常调用别的函数是一个道理)技术类文章一般都有时效性,本人会不定期对自己的博客进行修正更新,因此请访问出处以查看本文的最新版本。此时LeetCode里提供的函数可能不能直接用来递归,可以自己再创建一个函数。给你二叉树的根结点root,返回它结点值的前序遍历。①执行时范围不断缩小,这样才能触底反弹。忘记这句话:“自己调用自己就是递归”②终止条件判断在调用递归的前面。题目:LeetCode144。

2024-03-06 21:05:38 338 1

原创 算法学习(14)Hash的特征和队列基础

HashMap的实现原理是先要找到要存放数组的下标,如果是空的就存进去,如果不是空的就判断key值是否一样,如果一样就替换,如果不一样就以链表的形式存在链表中(从JDK8开始,根据元素数量选择使用链表还是红黑树存储)。当测试13在不在这个结构里时,同样用上面的公式,13 % 7 = 6,直接访问array[6]这个位置,很明显是在的,返回true;(1)哈希,也称散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。(2)映射(访问的时间复杂度为O(1))

2024-03-03 19:04:13 469

原创 算法学习(12)栈的经典算法问题

遍历字符串的时候,遇到左半边符号九入栈,遇到右半边符号就与栈顶的符号比较,不匹配就返回false。当一个元素要入栈时,我们取当前辅助栈的栈顶存储的最小值,与当前元素比较得出最小值,将这个最小值插入辅助栈中。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。当一个元素要出栈时,我们把辅助栈中的栈顶元素也一并弹出。在任意时刻,栈内元素最小值就存储再辅助栈的栈顶元素中。

2024-03-03 14:16:47 530

原创 算法学习(11)理解栈、手写栈

链表属于最简单的数据结构,Python也可以实现,不过比较少有场景是python现有数据结构不能满足而必须要上链表的。思想:采用顺序表实现的栈,内部以数组为基础,实现对元素的存取操作。在应用前要注意栈的容量是否够用,如果不够用,可以经行扩容。前面介绍过没有虚拟结点时对链表表头元素进行插入和删除的操作方法,与这里的基于链表实现栈时完全一致的。补充:top指针有的地方指向栈顶元素,有的指向栈顶再往上的一个空单位,这里需要根据题目设计。(5)对于C语言,没有直接的栈结构,需要自己构造或者引入第三方的包。

2024-03-03 14:16:22 308

原创 算法学习(3)链表高频面试算法题

题中两个链表分别为{1,2,3,6,7}和{4,5,6,7}。但是个人感觉这个拼接链表不正确,因为两个链表的6结点是一样的,真正拼接时应该会形成一个有环链表,此时两个链表的结点7不一样了,所以······不知道该怎么解释。定义fast和slow两个指针,fast先走N步,然后slow再开始走,当fast走到队尾的时候,slow就是我们要删除的结点。方法二:将链表元素全部压栈,然后一边出栈,一边重新遍历链表,一边比较两者元素值,只要有一个元素值,那就不是回文序列。

2024-03-03 12:29:49 767

原创 算法学习(13)表达式问题(利用栈)

方法:遍历字符串s,并用变量preSign记录每个数字之前的运算符,每次遍历到数字末尾时,根据该数字之前的运算符preSign来决定计算方式。代码实现中,若读到一个运算符,或者遍历到字符串末尾,即认为是遍历到了数字末尾。但对于计算机来说,中缀表达式是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转化成前缀或后缀表达式再进行求解。方法:利用栈,遇见数字即进栈,遇见运算符,则取出栈中最上面的两个元素进行计算,最后将运算结果入栈。遍历完字符串s后,将栈中元素累加,即为该字符串表达式的值。

2024-03-03 11:09:36 700

原创 算法学习(2)链表的基本问题

int val;

2024-02-17 21:36:21 329

原创 算法学习(1)算法体系结构

算法体系结构1、线性表1.1数组1.2链表1.3特殊线性表2、树形结构3、特殊结构4、递归4.1回溯4.2动态规划4.3贪心1、线性表1.1数组1.2链表1.3特殊线性表2、树形结构3、特殊结构4、递归4.1回溯4.2动态规划4.3贪心

2024-02-16 23:20:29 101 1

原创 算法学习(0)时间复杂度和空间复杂度

可以看出,当执行第七次时,count已经不满足count<n,执行次数x与n的关系正好是2^x=n,x=logn。执行了4次,是常数级,用O(1)表示;即使是重复了100次,也是用O(1)表示。例如:一个100*100的二维数组,数组每一行都是1到100,计算数组中所有数字之和。所以二分查找每循环一次都减半,所以to do的执行次数是logn。申请一个数组、链表、队列、栈或者Hash,空间复杂度是O(n);时间复杂度也为O(1)申请一个或者是两三个变量,空间复杂度是O(1);

2024-02-15 16:39:01 667 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除