自定义博客皮肤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)
  • 收藏
  • 关注

原创 代码随想录算法训练营第15天| LeetCode 222 完全二叉树的节点个数

如果把这棵树当成一个普通的二叉树,递归遍历前中后序都可以求该二叉树中节点的数量迭代法中层序遍历也可以统计普通二叉树完全二叉树方法满二叉树的节点数量为2^深度-1若完全二叉树子树是满二叉树的话,可以用满二叉树的公式计算如何判断子树是满二叉树再求深度:如果是满二叉树,一直向左遍历的深度和一直向右遍历的深度一定相等,子树若不是满二叉树,则继续向下遍历,一直向下去递归,一定可以遇到符合满二叉树条件的节点,不会进入死循环,最终叶子结点至少一定是满二叉树终止条件:结点为NULL。

2025-11-19 20:23:35 947

原创 代码随想录算法训练营第13天| LeetCode 344 反转字符串、LeetCode 541 反转字符串 ||、 卡码网 54 替换数字

1. 确定递归函数的参数和返回值:大多数二叉树题目参数并不多,基本上传入一个数组再传入一个根结点用于存放遍历的结果,返回值一般都是void,因为把我们想要的结果直接放在参数里了。2. 循环弹出队头元素直到size=0,size--,将队头元素的左右孩子入队,此时size等于队列里面元素的数量,size=2。1. 根结点入队,记录队列大小size=1(size表示二叉树这一层里面有几个元素)用队列保存每一层遍历的元素,图论中的广度优先搜索也是依赖队列实现。LeetCode 144 二叉树的前序遍历。

2025-11-19 14:40:41 445

原创 代码随想录算法训练营第9天| LeetCode 151 反转字符串中的单词、卡码网 55 右旋转字符串、LeetCode 28 找出字符串中第一个匹配项的下标

LeetCode 151 反转字符串中的单词先整个字符串全反转,再针对每个单词反转。

2025-11-17 14:53:17 851

原创 代码随想录算法训练营第7天| LeetCode 454 四数相加 ||(未完待续)

答:map 元素数值可能很大,用数组下标映射不够,因此考虑set和map,此题不仅要考虑a+b是否在该集合中,还需统计a+b在集合中出现多少次,才能和下面的c+d做映射。若用set只有一个key存是否出现过,出现过的次数还需value,因此使用map。暴力解法:四个for循环,遍历四个数组,取不同元素相加,若等于0,则count++,最后返回count。答:若采用该方法,则时间复杂度变成O(n^3),若先遍历两个,后遍历两个,时间复杂度为O(n^2)在一个集合中,判断一个元素是否出现过。

2025-11-13 13:01:27 426

原创 代码随想录算法训练营第8天| LeetCode 344 反转字符串、LeetCode 541 反转字符串 ||、 卡码网 54 替换数字

答:从前向后填充时间复杂度为O(n^2),因为每次添加元素都要将添加元素之后的所有元素整体向后移动。字符串头尾各有一个指针,指针指向需两两交换的位置,指针指向元素交换,双指针同时向中间移动。LeetCode 541 反转字符串 ||卡码网 54 替换数字。

2025-11-12 22:01:53 383

原创 代码随想录算法训练营第6天| LeetCode242 有效字母的异位词、LeetCode 349 两数组的交集、LeetCode 202 快乐数、LeetCode 1 两数之和(未完待续)

想要找一个元素,同时判断这个元素是否出现过,还需知道这个元素在数组里的下标。注:set 占用空间比数组大,且速度要比数组慢,set把数值映射到key上都要做hash计算的,遇到能用哈希表求解的问题,优先考虑数组。答:思考我们要查找什么,要查找这个元素是否出现过,因此用数值作为key,还需知道这个元素对应的下标,则用下标作为value。答:将遍历过的元素加到一个集合中,每次遍历一个元素,就判断要寻找的元素是否在集合中出现过,若在集合中出现过,则说明遍历过。答:每当遍历一个元素时,需要存放之间遍历过的元素;

2025-11-11 22:24:50 687

原创 代码随想录算法训练营第4天| LeetCode24 两两交换链表中的节点、LeetCode 19 删除链表的倒数第n个节点、LeetCode 链表相交、LeetCode 142 环形链表||

假设相遇的时候快指针已经在1循环里转过n圈了,所以 fast指针走过的节点数 = slow指针走过的节点数 * 2:(x+y)*2=x+y+n(y+z) 整理后得:x=(n-1)(y+z)+z(说明,头结点处一个指针,fast指针与slow指针相遇节点一个指针,他俩一起移动,一定会在环形入口节点处相遇)fast=fast->next;为什么相遇的时候slow指针走过的路程是x+y而不是(x+y)+k(y+z)(即为什么慢指针没有多转几圈,一定在第一圈的时候被快指针追上去了)?

2025-11-09 17:33:28 924

原创 代码随想录算法训练营第3天| LeetCode203 移除链表元素、LeetCode 27 移除元素、LeetCode 206 反转链表

两分为头结点和非头结点的处理方法移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点头结点移除只要将头结点向后移动一位就可以,这样就从链表中移除了一个头结点别忘将原头结点从内存中删掉设置一个虚拟头结点,这样原链表的所有节点就都可以按照统一的方式进行移除return dummy_head->next:head可能被删除设。

2025-11-07 19:57:04 341

原创 代码随想录算法训练营第2天| LeetCode209 长度最小的子数组、LeetCode 59 螺旋矩阵 ||

这时用另一个指针i,while循环,从初始位置后移,sum-=nums[i],若减后的sum依旧大于等于target,那么说明num[i]可以不要,有更小的长度,继续while直到不满足退出while,继续进行j的for循环。再回到下一个j时,i并没有从头再来,而是从下一个位置继续(时间复杂度O(n))时间复杂度O(n+n)=O(n):每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)时,尝试从左收缩以得到更短长度。滑动窗口法:使用一个。

2025-11-06 17:23:19 314

原创 代码随想录算法训练营第1天| LeetCode704 二分查找、LeetCode 27 移除元素、LeetCode 977 有序数组的平方

双指针法:双指针分别指向0和size-1,再new一个新的数组res,与nums大小相同,指针k指向res的末尾(思想:数组本身有序,两边大,中间小)比较原则:数组平方的最大值在数组两端。因此,每次比较nums[left]^2和nums[right]^2,取较大值放在k,k从后向前滑动。时间复杂度是 O(n + nlogn)即O(n)暴力排序:每个数平方后,快排。

2025-11-05 20:45:12 935

空空如也

空空如也

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

TA关注的人

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