- 博客(17)
- 收藏
- 关注
原创 代码随想录算法训练营第十四天 | 二叉树层序遍历、226.翻转二叉树、101. 对称二叉树
注意上面最后一种情况,我没有使用else,而是else if, 因为我们把以上情况都排除之后,剩下的就是 左右节点都不为空,且数值相同的情况。因为我们要比较的是根节点的两个子树是否是相互翻转的,进而判断这个树是不是对称树,所以要比较的是两个树,参数自然也是左子树节点和右子树节点。如上代码中,我们可以看出使用的遍历方式,左子树左右中,右子树右左中,所以我把这个遍历顺序也称之为“后序遍历”(尽管不是严格的后序遍历)。对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,理解这一点就知道了。
2024-01-26 20:12:19 808 1
原创 代码随想录算法训练营第十二天 | 239. 滑动窗口最大值、347.前 K 个高频元素
寻找前k个最大元素流程如图所示:(图中的频率只有三个,所以正好构成一个大小为3的小顶堆,如果频率更多一些,则用这个小顶堆进行扫描)
2024-01-18 21:28:29 2007 1
原创 代码随想录算法训练营第十一天 |20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
有的同学经常会想学的这些数据结构有什么用,也开发不了什么软件,大多数同学说的软件应该都是可视化的软件例如APP、网站之类的,那都是非常上层的应用了,底层很多功能的实现都是基础的数据结构和算法。所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。题意其实就像我们在写代码的过程中,要求括号的顺序是一样的,有左括号,相应的位置必须要有右括号。我们的代码只要覆盖了这三种不匹配的情况,就不会出问题,可以看出 动手之前分析好题目的重要性。
2024-01-17 20:04:02 1429
原创 代码随想录算法训练营第十天 |232.用栈实现队列、225. 用队列实现栈
在代码实现的时候,会发现pop() 和 peek()两个函数功能类似,代码实现上也是类似的,可以思考一下如何把代码抽象一下。使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈。,再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。这是一道模拟题,不涉及到具体算法,考察的就是对栈和队列的掌握程度。在push数据的时候,只要数据放进输入栈就好,,这里要注意输入栈和输出栈的关系。其实这道题目就是用一个队列就够了。最后如何判断队列为空呢?
2024-01-16 20:56:01 371 1
原创 代码随想录算法训练营第八天 |344.反转字符串、 541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串
一些同学会使用split库函数,分隔单词,然后定义一个新的string字符串,最后再把单词倒序相加,那么这道题题目就是一道水题了,失去了它的意义。本题中,我们需要将字符串右移n位,字符串相当于分成了两个部分,如果n为2,符串相当于分成了两个部分,如图: (length为字符串长度)想一下,我们将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。其实,思路就是 通过 整体倒叙,把两段子串顺序颠倒,两个段子串里的的字符在倒叙一把,
2024-01-12 14:01:49 863 1
原创 代码随想录算法训练营第七天 |454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
四数之和的双指针解法是两层for循环nums[k] + nums[i]为确定值,依然是循环内有left和right下标作为双指针,找出nums[k] + nums[i] + nums[left] + nums[right] == target的情况,三数之和的时间复杂度是O(n^2),四数之和的时间复杂度是O(n^3)。的双指针解法是一层for循环num[i]为确定值,然后循环内有left和right下标作为双指针,找到nums[i] + nums[left] + nums[right] == 0。
2024-01-12 11:16:38 866 1
原创 代码随想录算法训练营第六天 |有效的字母异位词 (LeetCode242)、两个数组的交集 (LeetCode 349)、 快乐数 (LeetCode 202)、两数之和 (LeetCode1)
总结一下,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!
2024-01-10 21:06:32 924 1
原创 C++|class申明
C++允许同一作用域中出现函数名相同,参数不同,功能相似的函数,而这些函数就构成函数重载。*a = *b;*b = temp;*a = *b;*b = temp;//这两个函数就构成函数重载。
2023-12-31 11:40:43 987
原创 代码随想录算法训练营第四天 |两两交换链表中的节点 (LeetCode24)、删除链表的倒数第N个节点(LeetCode19)、 链表相交 (面试题 02.07)、环形链表II (LC42)
首先找到两个链表的总长度,然后将其中一个长的链表移到和短的链表长度相等的位置,同时遍历两个链表,知道指向的位置相同。双指针,两个指针间隔N个位置,第一个指针遍历到尾巴,第二个指针就是倒数第N个位置。
2023-12-30 19:43:21 335
原创 代码随想录算法训练营第三天 |移除链表元素(LeetCode203)、设计链表(LeetCode707)、 反转链表 (LeetCode206)
算法刷题;链表增、删、改、查、逆置;力扣;
2023-12-29 20:29:56 486
原创 代码随想录算法训练营第二天 |sort函数、 有序数组的平方 (LeetCode977)、长度最小的子数组(LeetCode209)、螺旋矩阵II(LeetCode59)
自定义函数返回值为bool类型若返回true,则表示num1与num2应该交换顺序;若返回false, 则num1与num2保持原有顺序;下面举例说明自定义比较函数的执行过程。对 2, 5, 1, 3, 4 降序排列调用cmp函数时,将5赋值给num1, 2赋值给num2 (注意顺序)5 > 2, 返回true,num1 与 num2需进行交换;即5应该在2的前面数组变为 5, 2, 1, 3, 4第二次 将3赋值给num1, 1赋值给num2,
2023-12-29 14:56:54 1407 1
原创 代码随想录算法训练营第一天 | 数组理论基础、vector用法,二分查找(LeetCode704)、移除数组(LeetCode27)
代码随想录,算法训练营,vector使用,二分查找
2023-12-27 12:00:38 371 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人