自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营第十五天 | 102.层序遍历 226.翻转二叉树 101.对称二叉树

注意上面最后一种情况,我没有使用else,而是else if, 因为我们把以上情况都排除之后,剩下的就是 左右节点都不为空,且数值相同的情况。因为我们要比较的是根节点的两个子树是否是相互翻转的,进而判断这个树是不是对称树,所以要比较的是两个树,参数自然也是左子树节点和右子树节点。参数就是要传入节点的指针,不需要其他参数了,通常此时定下来主要参数,如果在写递归的逻辑中发现还需要其他参数的时候,随时补充。此时才进入单层递归的逻辑,单层递归的逻辑就是处理 左右节点都不为空,且数值相同的情况。层序遍历一个二叉树。

2023-07-31 14:20:38 1394 1

原创 代码随想录算法训练营第十六天 | 104.二叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

3.确定单层递归的逻辑:先求它的左子树的深度,再求右子树的深度,最后取左右深度最大的数值 再+1 (加1是因为算上当前中间节点)就是目前节点为根节点的树的深度。3.确定单层递归的逻辑:先求它的左子树的节点数量,再求右子树的节点数量,最后取总和再加一 (加1是因为算上当前中间节点)就是目前节点为根节点的节点数量。1.确定递归函数的参数和返回值:参数就是传入树的根节点,返回就返回以该节点为根节点二叉树的节点数量,所以返回值为int类型。本题依然是前序遍历和后序遍历都可以,前序求的是深度,后序求的是高度。

2023-07-27 16:56:46 1348 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。

2023-07-25 18:10:41 1845

原创 代码随想录算法训练营第十四天 | 理论基础 递归遍历

int val;

2023-07-25 17:51:30 1791

原创 代码随想录算法训练营第十三天 | 239. 滑动窗口最大值 347.前 K 个高频元素

题目链接:239. 滑动窗口最大值文章讲解:239. 滑动窗口最大值视频讲解:单调队列正式登场!| LeetCode:239. 滑动窗口最大值_哔哩哔哩_bilibili 暴力方法,遍历一遍的过程中每次从窗口中再找到最大的数值,这样很明显是O(n × k)的算法。我们需要一个队列,这个队列呢,放进去窗口里的元素,然后随着窗口的移动,队列也一进一出,每次移动之后,队列告诉我们里面的最大值是什么。这个队列应该长这个样子:每次窗口移动的时候,调用que.pop(滑动窗口中移除元素的数值),que.push(

2023-07-24 19:45:06 1779

原创 代码随想录算法训练营第六天 | 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

std::set和std::multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希表, 使用unordered_set 读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set。在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。所以 map中的存储结构为 {key:数据元素,value:数组元素对应的下标}。

2023-07-19 17:50:01 1774

原创 代码随想录算法训练营第八天 | 344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串

对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。我们将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。字符串也是一种数组,所以元素在内存中是连续分布,可以使用双指针的方法来解决这个问题。最后就可以达到左旋n的目的,而不用定义新的字符串,完全在本串上操作。举个例子,源字符串为:"the sky is blue "例如 :示例1中 输入:字符串abcdefg,n=2。

2023-07-19 17:38:05 2387

原创 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II

可以使用双指针的方法,定义一个fast指针和一个slow指针,fast先移动N步,随后fast和slow同时移动,当fast指向NULL的时候,slow指向的就是倒数第N个节点。但是如果想要删除一个节点,指针就必须指向要删除节点的前一个节点,所以可以使fast先移动N+1步,然后fast和slow在同时移动,这样slow就指向的是要删除节点的前一个节点。这就意味着从头节点出发一个指针index1,从相遇节点也出发一个指针index2,这两个指针每次只走一个节点,那么相遇的地方就是入口的节点。

2023-07-16 19:09:31 2808 1

原创 代码随想录算法训练营第三天 | 203.移除链表元素 707.设计链表 206.反转链表

/ 单链表int val;// 节点上存储的元素// 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数。

2023-07-15 20:26:29 2911 1

原创 代码随想录算法训练营第二天 | 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

缺点就是两层for循环,时间复杂度很高,为O(n^2)。这里注意for循环中的j--和i++不能填在for循环之内,因为要看是A[i]*A[i]<A[j]*A[j]还是A[i]*A[i]>=A[j]*A[j]才能判断是该j--还是i++。一个数组,他的元素进行平方后,最大值一定会在两边不会在中间,比如-4,-1,0,3,10,五个数字经平方后从大到小的顺序是由两边向中间。这时可以运用双指针的解法,i指向起始位置,j指向终止位置,由两边向中间走,再创建一个新数组,用来存放排序后的元素,就可以解决这个问题。

2023-07-13 22:55:18 3202 1

原创 代码随想录算法训练营第一天 | LeetCode 704 二分查找、LeetCode 27 移除元素

懂得了如何运用两种区间来解决二分法,在左闭右闭区间中left=right是有意义的,而在左闭右开区间中则是没有意义,在左闭右闭区间中right要更新为middle-1,而在左闭右开区间中则要更新为middle。两种方法:左闭右闭即[left, right],或者左闭右开即[left, right)时间复杂度:O(log n) 空间复杂度:O(1)时间复杂度:O(log n) 空间复杂度:O(1)时间复杂度:O(n^2) 空间复杂度:O(1)时间复杂度:O(n) 空间复杂度:O(1)

2023-07-12 18:21:13 3484 1

空空如也

空空如也

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

TA关注的人

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