自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营第十四天 | 二叉树理论基础,递归遍历,迭代遍历,统一迭代

堆被定义为。在最大堆中,对于任意父节点,其值大于或等于其子节点的值。在最小堆中,对于任意父节点,其值小于或等于其子节点的值。一般来讲,堆是一棵完全二叉树在插入和删除元素时,堆具有O(logn)的时间复杂度,查找堆顶元素有O(1)的时间复杂度,非常快速。

2023-10-25 01:12:50 70 1

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

在阅读过思路后我写出了自己的解法,代码不够精炼但至少能动手了卡哥的代码则提高了抽象层次,抽象出了一个新的类并按需要改变了函数的处理方式。

2023-10-23 20:08:35 32

原创 代码随想录算法训练营第十一天| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值。

题目不难,能想到大概的思路但是实现起来还是有一些小细节没考虑到,具体在于左右括号对应时相消的逻辑不够清晰。

2023-10-23 00:25:18 28

原创 代码随想录算法训练营第十天| 232.用栈实现队列、225. 用队列实现栈。

因为自己没怎么接触过栈和队列,因此这部分基本先看卡哥的思路再看能不能自己复现出来,写出来的代码可以通过但是抽象层次不够,也不够简洁,就比如peek部分的代码复用就没有想到。

2023-10-22 15:13:09 24 1

原创 代码随想录算法训练营第九天| 28. 实现 strStr()、459.重复的子字符串、字符串:总结篇、双指针总结篇。

题目链接:28. 实现 strStr()我自己的解法用时间换空间,时间复杂度较高以下重点学习和介绍KMP算法文章中字符串的前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串。后缀是指不包含第一个字符的所有以最后一个字符结尾的连续子串next数组记录每个位置为n(0,1,2,……)的长度为n+1的字符串的最长相等前后缀的长度,当识别到匹配不成功时,返回到当前指向的也就是第一个不匹配位置的前一位对应的最长相等前后缀的值所对应的next数组的下标处开始重新匹配,避免了从头开始进行匹配使用KMP算法可

2023-10-19 22:27:38 23

原创 代码随想录算法训练营第八天 | LeetCode 344. 反转字符串 541. 反转字符串 II 151. 反转字符串中的单词 剑指Offer58-II.左旋转字符串

题目很简单,直接放上代码,其中交换的部分可以使用swap函数替代。

2023-10-18 22:28:04 90 1

原创 代码随想录算法训练营第七天| 454.四数相加II 、383. 赎金信 、15. 三数之和、18. 四数之和

题目看起来简单但做起来还是没什么思路,本题和处理两数之和类似但又不同,关键在于map容器的选取以及key-value中到底存放什么东西。遍历nums1和nums2,计算所有可能的和的组合并将其存储在一个哈希表中,其中key是和的值,而value是和出现的次数(和两数之和存放下标不同,题目求出现次数)。遍历nums3和nums4,对于每个元素x,计算-x并查看它是否存在于哈希表中。如果存在,将哈希表中-x对应的值加到结果中。

2023-10-17 22:19:38 21

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

这样的做法确实非常麻烦,其实也没有很好的发挥map容器的优点,按卡哥的做法是unordered_map<int><int>(无序存储不需要map)对象中,key保存值而value保存下标,因为查找是根据key而返回时需要下标,然后遍历map寻找是否存在target - key对应的另一个key,如果没有就在map中插入这个key-value,减少了一次对数组的遍历。这题的暴力解法略,着重考虑使用哈希表的解法。

2023-10-16 20:29:45 81 1

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

开始做这道题的时候人是懵的,主要是不明白对于奇数个节点怎么进行两两交换,后来想明白了最直接的办法就是不处理最后多出来的那个节点就行了,对于原本的顺序如果直接两两交换会导致交换完成后没有东西指向新的头节点,因此我们引入一个虚拟头节点dummy的方式,保证这个节点始终指向这个链表的头节点,然后对后续的节点进行操作接下来是交换的逻辑,这也是重点。首先用两个临时变量保存cur节点的后一个以及后面第三个节点,这样做的原因是后续我们要将cur指向后面第二个节点,从而丢失对后一个节点的访问;

2023-10-14 22:02:34 251

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

完成这个题目不难,但是想出来一个统一的解法不容易。一般的做法是将题目分为是否为头节点两种情况进行处理,因为对单链表的后续节点的val进行判断和处理比对本节点直接处理要简单,统一的做法则是设置一个新的虚拟头节点,将原本的头节点作为一个普通节点进行统一化处理,然后返回虚拟头节点的next。还有需要注意的一点是C++语言会有内存处理的问题,这导致代码的形式会发生一些变化,因为不能在删除不需要的节点后对原链表进行统一处理。

2023-10-13 22:07:03 371

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

最直观的想法就是把数组使用for循环遍历之后使用常见的排序算法进行重新排序,但考虑到题目对于时间复杂度O(n)的要求,常见的排序算法的时间复杂度最小也是O(nlogn),加上一个for循环,时间复杂度也是O(nlogn)这里我们考虑到有序数组在平方后,最大的数不在最左边就在最右边,因此可以采用双指针法,依次比较最右边以及最左边节点的值,把大的值放在数组的最右边并更新节点,从而在一次对数组的遍历中完成对数组的排序。

2023-10-12 22:26:00 478

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

使用二分法的常见前提条件:1、 有序数组 2、,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的二分查找一般分为“左闭右闭”和“左闭右开”两种常见情况,所谓“开”“闭”指的是数组的左右边界是否在区间内,这关系到右端点right的值,while循环以及if的判断:以前者为例,当左右都为闭区间时,右端点包含在查找内部,因此right = nums.size()-1;数组的下标可以使left=right,因为此时左右端点都在数组的内部,因此判断条件为while(left <= right);

2023-10-11 21:17:34 652

空空如也

空空如也

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

TA关注的人

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