- 博客(8)
- 收藏
- 关注
原创 算法笔记 第四章-算法初步 | 4.3递归——谢尔宾斯基地毯、自然数分解之最大积、自然数分解之方案数、01串
题解中没有把'+'写入二维数组,而是在需要的地方直接打印出来。我的做法是写入数组,这样递归的(x,y)从(1,1)出发,更方便我计算坐标。本来想的做法是将n对半分,两边各调用一次递归,但是发现这样做的乘积不是最大的。题解的代码没有注释也没写思路,没有看明白。我参考了其他人的非递归代码的思路写了这个代码,和题解的做法比起来,单独处理第一次的情况的代码确实丑陋了一点。这题没太搞懂,看了一下提交数,果然提交的人也很少,只能看着题解来做题了。
2024-01-12 16:22:43 920 1
原创 代码随想录第七天| 第454题.四数相加II、383. 赎金信 、 15. 三数之和 、 18. 四数之和
本题一开始没搞懂为什么要用map来做,感觉用set好像也能解决,后面发现用map的原因是能记录下和出现的次数,这样的话如果能在剩下的两数组中找到加和等于0的两个数,就能得到这一组合的所有排列组合,即就是和出现的次数。记住map可以类似于数组一样通过访问下标访问元素。383. 赎金信本题也可以使用数组,也只需要26大小的数组就可以了,而且按代码随想录中的说法数组更高效:一些同学可能想,用数组干啥,都用map完事了,
2024-01-04 15:56:32 882 1
原创 代码随想录第六天| 242.有效的字母异位词 、 349. 两个数组的交集 、 202. 快乐数 、 1. 两数之和
灵活运用辅助数组,以空间换时间。个人来说,数组用的比较多,也比较好想,对于set和map就用的不是很熟练了。但是运用数组来使用哈希法只适合元素范围不大的情况,而且如果元素个数比较少,那么1001大小的数组也会造成比较大的浪费,所以这题还是要学着使用std::unordered_set。看了代码随想录的解法,学到了有一个c++的特性:①for循环里的冒号:for(数据类型 变量:容器)。表示把容器中的数据逐个读入变量然后进入循环。②set和vector的构造函数,可以简洁地初始化。
2024-01-03 22:54:02 857 1
原创 代码随想录算法训练营第四天| 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点 、 160.链表相交、142.环形链表II
这题还是得画图,不然指针绕来绕去真的会弄不清楚。和代码随想录给的题解有点区别,考虑了一下应该是因为我判断的是fast->next是否存在,因为fast指针不用额外移动一次了。①千万记得下次遍历链表的时候不能动头指针。②注意题目中的相交指的是链表有同样的结点,也就是指针相同,而不是值相同。③代码随想录中的长链表判断和处理更符合程序思维,简化为始终处理A链表,如果B更长就将B和A交换,还是看做对A做处理。这题如果不了解,真的很难想到。要掌握这题的数学逻辑,要搞明白为什么快慢指针相遇代表有环?
2023-12-31 13:30:05 383
原创 代码随想录算法训练营第三天| 203.移除链表元素 、 707.设计链表 、 206.反转链表
链表理论上掌握的算是很熟悉了,但是实际解决代码问题还是碰到了不少问题。第一次了解到定义构造函数的做法,和使用默认构造函数的区别。定义构造函数,不仅可以初始化赋值,也能直接指明后继节点,很方便。之前学习过带头节点和不带头结点的链表处理,但是确实没转过来弯想到能自己定义一个虚拟头结点,另外new应该配合delete使用,自己的代码对比代码随想录的还是不够完善,应该把virtul->next赋给head,然后删掉自己定义的virtul。①要搞清题目给的例子,摸清楚index的有效范围。
2023-12-30 16:09:36 327 1
原创 代码随想录算法训练营第二天| 977.有序数组的平方、 209.长度最小的子数组、 59.螺旋矩阵II
对比了一下代码随想录的做法,也是双指针做法,不过拿数组首部和尾部开始比较,每次把最大的一个平方数放在新数组中,这样的确省去了我找中间位置的时间,也不用对全负的情况特殊讨论。归根到底还是自己对vector容器的使用不熟练,只想到从前往后插入数字的情况。按这种思路重写一遍代码果然简洁多了。
2023-12-28 19:14:19 348
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
个人理解,在左闭右闭的区间里面,low能够在小于等于high的范围内有意义,而如果发现mid大于target,那么应该在mid的左边的区间继续寻找,而这个区间无需包括mid,因为左闭右闭的特性所以要high=mid-1。在左闭右开的区间里面,low只有小于high的范围才是有意思的,否则跳出循环,而如果发现mid大于target,那么同样是在mid的左边区间继续找,但是因为左闭右开区间,所以右边的应该是右边区间最高元素位置加一,也就是high=mid。ok,这下有了第二版代码,但是却提醒结果错误。
2023-12-27 23:17:33 323
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人