![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代码随想录算法训练营
文章平均质量分 63
包含代码随想录算法训练营每天的题目解答和参考答案(Java版)。
Dim and Gusty
这个作者很懒,什么都没留下…
展开
-
代码随想录算法训练营第十天 | 232. 用栈实现队列、225. 用队列实现栈
出“栈”时,将队列除了最后一个入队的元素以外的元素全部移出队列,再重新入队,这样,执行poll操作时队首元素就是最新一个入“栈”的元素了。将前面的移出队列再重新入队的操作写成一个方法,在出“栈”和获取“栈顶”元素时调用。获取“队列顶”与出“队列”的操作差不多,只是最后将pop换成了peek,因此可以将前面的操作写成一个方法,在出“队列”和获取“队列顶”时调用。出“队列”时,将入栈的元素移动到出栈中,这样最外面的元素就是最先进入“队列中的元素了”,再对出栈正常进行pop操作。入“队列”时与入栈操作一样。原创 2024-02-17 16:41:32 · 195 阅读 · 1 评论 -
代码随想录算法训练营第九天 | 28. 找出字符串中第一个匹配项的下标、459. 重复的子字符串、双指针回顾
本题是KMP算法的一个最简单的应用。KMP算法主要的用处即为找到匹配字符串的下标。我们用题目中的haystack和needle字符串来讲解KMP算法的原理。给needle字符串建立一个前缀表,存储在每个字符之前(包括该字符)最长的相同前后缀的长度。之后再用这个前缀表来匹配needle字符串,当已经匹配了一段相同的字符串,突然匹配到一个不相同的字符时,可以倒回到不相同的字符的前一个字符的最长相同前缀之后的一个位置。为什么是这个位置呢?原创 2024-02-14 21:08:25 · 630 阅读 · 1 评论 -
代码随想录算法训练营第一天 | (选做)35. 搜索插入位置、34. 在排序数组中查找元素的第一个和最后一个位置
本题要求找出给定目标值在数组中的开始位置和结束位置,分开计算开始位置和结束位置比较好写,可以将计算开始位置和计算结束位置写成两个方法。同时对于target不在数组中的情况,返回[-1, -1]。原创 2024-01-26 18:30:10 · 323 阅读 · 1 评论 -
代码随想录算法训练营第八天 | 344. 反转字符串、541. 反转字符串 II、卡码网54. 替换数字、151. 反转字符串中的单词、卡码网55. 右旋字符串
将上一题的答案写做一个单独的方法,在循环中调用即可,直接在参数中加入左指针和右指针,方便在循环中设置范围。因此可以写一个去除首尾以及中间多余空格的方法,接着调用一个方法反转字符串,最后再用一个方法反转单词中的字符串。在去除首尾以及中间多余空格的方法中建立start和end指针,如果首位是空格就可以直接移动指针,之后正常遍历字符串,将单词和单词后的第一个空格加入SrtringBuilder。反转单词时,用start指针标记单词的起点,用end指针找到单词的结尾,end指针不指向空格时继续移动。原创 2024-02-02 23:40:07 · 232 阅读 · 0 评论 -
代码随想录算法训练营第七天 | 454. 四数相加 II、383. 赎金信、15. 三数之和、18. 四数之和
本题要求计算有多少个元组满足和为0的要求,因此可以使用HashMap,key用来存储和,value用来存储和出现的次数。在此之前,首先创建一个整型count用来做方法的返回值。之后先遍历前两个数组,将每两个元素的和以及出现的次数记录在HashMap中。然后遍历后两个数组,用getOrDefault去刚刚的HashMap中寻找是否有key是0减去剩余的两个元素的和,是的话就将对应的出现次数加到count上,否则加的是默认值0。原创 2024-02-01 20:59:22 · 229 阅读 · 1 评论 -
代码随想录算法训练营第六天 | 242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
本题要求判断两个字符串中每个字符出现的次数,可以使用数组,将每个字母记为不同下标,在遍历第一个字符串时在遇到的字符串上做累加,遍历第二个字符串时再递减,最后检查这个数组有没有不为0的元素就可以判断两个字符串中每个字符出现的次数是否相同。因此可以创建一个大小为26的整型数组,遍历字符串中的每个字符时,使字符减去'a',得到本字母与a字母ASCII码的差值,就达成了每个字母对应一个下标的目的。原创 2024-01-30 21:36:07 · 301 阅读 · 1 评论 -
代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19. 删除链表的倒数第 N 个结点、面试题 02.07. 链表相交、142. 环形链表 II
本题同样可以创建指向head的虚拟头节点dummy方便操作。当后两个节点都不为空时执行交换操作(如果后面只有一个则不需要再交换)。分别使用临时节点temp1和temp2储存第一个节点和第三个节点的指针,之后再进行节点指针的调换。原创 2024-01-29 18:41:56 · 323 阅读 · 0 评论 -
代码随想录算法训练营第三天 | 203. 移除链表元素、707. 设计链表、206. 反转链表
只要遍历到链表里的每个元素判断值是否为val,值为val的元素删除即可。链表中的删除操作通过将.next设为.next.next实现。循环条件设为while (cur.next!= null),每检查一个结点之后将cur设为下一个结点,但是这样没法检查头结点,因此我们创建一个虚拟结点dummy,将dummy的next设为头结点,在进入循环之前将cur设为dummy就可以解决这个问题了。最后返回dummy.next打印删除后的链表。原创 2024-01-27 20:47:27 · 182 阅读 · 0 评论 -
代码随想录算法训练营第二天 | 977. 有序数组的平方、209. 长度最小的子数组、59. 螺旋矩阵 II、数组总结
数组算法题一般采用的解决方法有二分法、快慢指针法和滑动窗口法。这些方法都是使用两个指针来不断控制当前程序运行的范围。其中,二分法是通过每次计算中间值将范围缩减一半。而快慢指针法和滑动窗口法都是一个指针用来遍历,另一个指针根据条件进行移动。比如在27. 移除元素中,慢指针只有在快指针指向的元素是不用被移除的元素时才移动。而在209. 长度最小的子数组使用的移动窗口法中,左侧指针在当前范围的和超过target后向左移动。原创 2024-01-26 20:48:40 · 371 阅读 · 1 评论 -
代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素
首先介绍一下二分法。对于元素有序且不重复的数组,可以使用二分法查找某个特定元素的下标。二分法简单来说就是循环的将数组对半分,每次都先取一个最中间的值,判断要找的元素比这个中间值大还是小,如果元素比中间值小,就将搜索区间变为上一次的搜索区间的前一半,反之就将搜索区间变为上一次的搜索区间的后一半。第一次搜索之前,将搜索区间设为整个数组。搜索区间的变化可以使用left和right两个变量来实现,这两个变量也可以理解为指针。left和right的作用是划定要搜索的数组下标。原创 2024-01-24 19:22:29 · 306 阅读 · 0 评论