![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
填写自己学习的代码
CrozzMoy
这个作者很懒,什么都没留下…
展开
-
数论Leetcode204. 计数质数、Leetcode858. 镜面反射、Leetcode952. 按公因数计算最大组件大小
给定整数 n ,返回 所有小于非负整数 n 的质数的数量。原创 2024-01-26 17:52:28 · 493 阅读 · 0 评论 -
leetcode141. 环形链表(快慢指针)
前指针快,后指针慢,如果存在环则会有前指针追赶到后指针。在循环判断的时候要注意前指针得判断它的前指针也不为空,否则会造成空指针异常。原创 2023-05-11 23:32:02 · 38 阅读 · 0 评论 -
leetcode234. 回文链表
直接把单链表复制到数组里,再通过数组来遍历判断。原创 2023-05-11 23:10:40 · 48 阅读 · 0 评论 -
leetcode21. 合并两个有序链表(递归)
常规写法容易缺少判断边界,因此使用递归是个不错的选择,有效减少代码量的同时还不易出错,当其中一个已经遍历到null时就返回另外一个,当都不为空时就可以根据他们的大小进行递归,返回的是当前进行递归的next。原创 2023-05-11 21:03:44 · 46 阅读 · 0 评论 -
leetcode206. 反转链表(链表反转)
增加一个中间结点用来暂时保存下一个指针,让当前链表反转的时候next不会找不到对应元素。原创 2023-05-11 20:44:27 · 31 阅读 · 0 评论 -
leetcode19. 删除链表的倒数第 N 个结点(双指针)
很明显题意要找到倒数第n个元素,因此用前后双指针能很好解决这个问题,但是因为是删除单链表操作,因此要找到倒数第n+1个。考虑边界情况当n刚好等于链表长度,分两种情况:1、单链表只有一个元素(这种只需要返回null即可);2、单链表不止一个元素(只需要返回头结点前一个即可)。原创 2023-05-11 20:25:24 · 28 阅读 · 0 评论 -
leetcode237. 删除链表中的节点
不需要在内存中删除,换句话说也可以对他进行改造,那怎么改造呢?可以直接让它变成它儿子的值,再把它的next指向它的孙子。原创 2023-05-11 18:18:45 · 25 阅读 · 0 评论 -
leetcode14. 最长公共前缀(最长前缀)
第一个for循环为了找出来数组里的字符串长度最小值,因为第一个字符串不一定是最长的。再通过两层for循环依次遍历每一个字母以及每一个字符串对应位置上的字母,用flag来判断是否是不相同,若不相同则可以直接退出。用res来接收每次成功的字符,最后只需要返回res即可。原创 2023-05-11 18:00:01 · 26 阅读 · 0 评论 -
leetcode38. 外观数列(暴力解法)
定义一个temp和一个res,res用来遍历判断数据的分布情况,temp用来记录当前处理完一个连续子段,当处理完一个子段就将其用temp拼接起来,最后再与res一起拼接。两层for循环,一层用来控制次数,一层用来遍历res。count用来记录当前子段每一个字母出现的次数。原创 2023-05-11 17:46:29 · 23 阅读 · 0 评论 -
leetcode28. 找出字符串中第一个匹配项的下标(kmp算法欠)
2:kmp(先欠着)原创 2023-05-11 16:57:00 · 34 阅读 · 0 评论 -
leetcode8. 字符串转换整数 (atoi)(传统方法,自动机还没学o(╥﹏╥)o)
常规做法根据题意只需要对字符串进行遍历并对字符进行判断即可,先去获取正负号(正号可能会省略),获取数字也是通过从大到小累加起来,用INT_MAX/10来判断当前数是否越界(因为当前数是要先加上num,因此INT_MAX需要先减去num),对最后的结果只需要根绝一开始的正负号返回对应正负数即可。原创 2023-05-10 21:03:39 · 36 阅读 · 0 评论 -
leetcode125. 验证回文串(简单字符串处理)
判断思路很简单就是前后判断(也可以用双指针来判断),因此无非多了一步就是先把字符串的处理字母的其他字符去除掉即可,因此直接遍历拼接。原创 2023-05-10 17:09:27 · 71 阅读 · 0 评论 -
leetcode242. 有效的字母异位词(hash||sort)
因为是字母相同首先考虑就是用hash来处理,只需要遍历两遍即可。考虑到ascill码的有序性,因此可以考虑先对字符串进行排序,只需要对排完序的字符串进行比较即可。原创 2023-05-10 16:44:03 · 27 阅读 · 0 评论 -
leetcode387. 字符串中的第一个唯一字符(hash存储+ordered_map)
只需要找到不重复的元素,因此除了不重复元素其余元素都是大于1,因此首先想到的是用数组来做hash,但是这样会导致太多的空间浪费,因此考虑用unordered_map。原创 2023-05-10 16:19:04 · 44 阅读 · 0 评论 -
leetcode48.旋转图像
因为旋转的时候无非就是四个方向的交替旋转,因此用一个temp来保存i行j列的元素,等其他三个位置都旋转完覆盖到对应的位置时便可以对最后一个元素赋temp。要注意的是旋转过程中并不是遍历所有行列,行列为偶数时只需要遍历行列元素的一半,当行列为奇数时则按照图中这样进行划分,行列也可以交换。开辟一个矩阵用来接收遍历时旋转的结果。原创 2023-05-08 20:49:53 · 27 阅读 · 0 评论 -
leetcode36.有效的数独(哈希)
题意是让我们进行判断所填入的元素是否满足要求,因此只需要双重for循环遍历并且判断是否满足条件即可。而判断条件是判断行、列、小方块内的元素是否唯一,因此开辟三个二维数组做哈希映射。原创 2023-05-08 18:06:44 · 82 阅读 · 0 评论 -
leetcode1.两数之和(数组)
两层for循环直接暴力搜索,通过left和right来标记找到的下标。原创 2023-05-08 17:17:21 · 30 阅读 · 0 评论 -
leetcode283.移动零(数组快慢指针)
因为要往后移动的元素都是相同的,因此可以在遍历的时候设置一个当前指针、一个结果指针,当遍历到需要往后移动的元素0时,就用需要往前移动的元素来占住它的位置,遍历一遍完后当前指针会走到容器长度,而结果指针此时走到第一个需要补充相同元素0的位置,只需再依次填充0直到对应长度即可。原创 2023-05-08 17:04:28 · 70 阅读 · 0 评论 -
leetcode66.加一(数组)
很明显这一题的思路就是从后开始遍历,但要考虑到一点就是进位问题,因此从最后一位开始自增1,如果遇到当前位对10取模后不为0,则可以将该容器直接返回;若取模后为0则发生了进位,因此需要对前一位进行自增操作,依次一直到容器最低位。特殊情况就是容器全为9,这时候就是特殊开辟一个容器,长度用原容器加1,首位为1,其余为0。原创 2023-05-08 16:38:37 · 32 阅读 · 0 评论 -
leetcode350.两个数组的交集 II(排序双指针)
题目没有要求输出的集合是按照某种顺序,因此首先考虑的就是直接暴力双指针搜索出所有元素并存入容器里,但是这样的话很有可能会造成超时,因此可以先考虑对所有元素进行排序,接着再通过双指针的思路进行搜索,这样能有效降低复杂度。原创 2023-05-08 15:29:19 · 30 阅读 · 0 评论 -
leetcode136.只出现一次的数字(异或)
同0异1,因此当需要消除偶数个相同的数,可以考虑使用异或,而此题刚好是只有一个唯一的数,其他都是偶数,因此考虑对所有数都进行异或可以将偶数的数都消掉,最后就只剩下单个数。原创 2023-05-08 15:11:48 · 34 阅读 · 0 评论 -
leetcode217.存在重复元素(排序初步)
当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序。但无论使用什么算法时间复杂度都为O(nlogn)。:当然对于结构体也可以进行比较。如果使用两层for循环会超时。原创 2023-05-08 14:57:15 · 23 阅读 · 0 评论 -
leetcode189. 轮转数组(数组翻转)
循环数组整体平移k个单位时,可以通过先整体翻转,接着再对两个单独子序列进行翻转,便可以实现原地平移。原创 2023-05-04 22:57:35 · 22 阅读 · 0 评论 -
leetcode122. 买卖股票的最佳时机 II(数组贪心)
很自然有一个问题就是,为什么今天的股票又能卖出去,又能买进来?试想一下1 2 3这三个的最大利润为3-1=2,遍历整个数组,只要当天卖出去能比前一天买进来的利润大就可以直接相减,再把总利润相加。,这样求得的最大利润也同样是2。原创 2023-05-04 22:17:51 · 44 阅读 · 0 评论 -
leetcode26. 删除有序数组中的重复项(数组双指针)
如果不相等,将 q 位置的元素复制到 p+1 位置上(与p不同的元素q占据p的后一个位置),p 后移一位,q 后移 1 位。重复上述过程,直到 q 等于数组长度(用来判断循环是否结束)。要求删除重复元素,实际上就是将不重复的元素移到数组的左侧。返回 p + 1(因为数组默认从0开始),即为新数组长度。首先注意数组是有序的,那么重复的元素一定会相邻。比较 p 和 q 位置的元素是否相等。如果相等,q 后移 1 位。原创 2023-05-04 21:44:15 · 115 阅读 · 1 评论