- 博客(9)
- 收藏
- 关注
原创 代码随想录算法训练营第十天|232.用栈实现队列、225. 用队列实现栈
做今天题目之前,可以先了解一下栈与队列理论基础文章链接:代码随想录代码随想录PDF,代码随想录百度网盘,代码随想录知识星球,代码随想录八股文PDF,代码随想录刷题路线,代码随想录知识星球八股文。
2023-08-04 18:56:16 198 1
原创 代码随想录算法训练营第九天|28. 实现 strStr()、459.重复的子字符串、字符串总结、双指针回顾
本文中一共介绍了leetcode上九道使用双指针解决问题的经典题目,除了链表一些题目一定要使用双指针,其他题目都是使用双指针来提高效率,一般是将O(n^2)的时间复杂度,降为O(n)。
2023-08-03 19:11:27 210
原创 代码随想录算法训练营第八天|344.反转字符串、541. 反转字符串II、剑指Offer 05.替换空格、151.翻转字符串里的单词、剑指Offer58-II.左旋转字符串
因为之前按照卡老师的写法三个都是right--执行不出来,因为right作为数组下标最后可能等于-1(<0) 抛出异常了,为什么可能等于-1呢,举个例子,如果字符串是“空格we",然后执行这个循环,你会发现最后一步是right--正好=0,然后把chars[right--]换成%,但是,right--等于0,right此时已经等于-1了!想一下,我们将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。,在反转链表中,使用了双指针的方法。
2023-08-02 20:16:39 190
原创 代码随想录算法训练营第七天|454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
思路:刚拿到题时想到了昨天做的那个同一数组求出两数之和为目标值的 两数下标(思路是创建一个map,然后遍历该数组,求出目标值减去当前值的那个数,然后看那个数是否在map的键中,如果在就返回键值对中的值(下标),如果不在就把当前数的键值对存放到map里)。一些同学可能想,用数组干啥,都用map完事了,其实在本题的情况下,使用map的空间消耗要比数组大一些的,因为map要维护红黑树或者哈希表,而且还要做哈希函数,是费时的!空间复杂度: O(n^2),最坏情况下A和B的值各不相同,相加产生的数字个数为 n^2。
2023-08-01 20:36:12 268
原创 代码随想录算法训练营第六天|242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
总结一下,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
2023-07-31 20:04:03 233
原创 代码随想录算法训练营第四天| 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交 、142.环形链表II
如何找到环形链表的入口。
2023-07-29 19:59:04 136
原创 代码随想录算法训练营第三天|203.移除链表元素、707.设计链表、206.反转链表
为什么要保存一下这个节点呢,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。思路:移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过令前一个节点等于下下一个结点来移除当前节点,而头结点是没有前一个节点的,删除头结点只需要将头结点向后移动一位就可以。思路:这是一道考察链表综合操作的题目,会了这道题链表相关内容基本都没啥大问题了,此题建议直接观看代码随想录卡老师的视频,说的非常非常清楚,里面容易错的以及该注意的细节全部说到了!
2023-04-02 05:00:16 253
原创 代码随想录算法训练营第二天|977.有序数组的平方、209.长度最小的子数组 、59.螺旋矩阵II
若下一步的位置超出矩阵边界,或者是之前访问过的位置,则顺时针旋转,进入下一个方向。思路:刚看到题目时,是毫无思路的,通过卡老师的动画演示学到了滑动窗口法,左右指针是滑动窗口的两边,刚开始都在0的位置,用滑动窗口循环数组,不断扩大窗口,如果窗口中元素的和大于等于target,就开始缩小窗口,然后更新最小滑动窗口。思路:我想到的是直接排序,将数组 nums 中的数平方后直接排序, 同样因为使用了排序算法, 时间和空间复杂度都非常高,但比较简单易懂。空间复杂度:O(1),除了返回的矩阵以外,空间复杂度是常数。
2023-03-17 11:52:29 543
原创 代码随想录算法训练营第一天|704.二分查找、27.移除元素
思路:通过二分查找法将范围一步步缩小,首先取数组最中间的数和目标值对比,如果相等,那么返回该数的下标,如果目标值小于中间数,那么将下一次循环的右值减去1(right-1);解法均使用java,此题选用左闭右闭的思路。我首先想到的是暴力解法,即使用两层for循环,一个for循环遍历数组当前元素 ,第二个for循环更新数组,即如果当前值等于目标元素,那么就把当前值之后的所有元素都往前移一位。思路1:首先要知道多余的元素不是删掉就行了,要知道数组的元素在内存地址中是连续的,数组中的元素是不能删掉的,只能覆盖。
2023-03-16 08:52:04 748 3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人