- 博客(9)
- 收藏
- 关注
原创 代码随想录算法训练营第十四天| 二叉树的前序、中序、后序遍历
上面的写法利用了递归的思想,看到代码随想录提到了利用迭代以及栈的方式也能实现三种遍历,感叹栈之巧妙,具体写法这里不给出了,具体详见。今天花了比较多的时间在看二叉树以及二叉树的遍历上,尤其是迭代求解的方法,比较难理解,加油!
2023-09-06 00:15:04 52 1
原创 代码随想录算法训练营第十天| 232.用栈实现队列 、225. 用队列实现栈
当我看到这一题的时候,心想出题人是不是有猫病。好好的队列不用,非要用两个栈去模拟队列,但转头一想,用两个栈实现队列这件事貌似没有那么容易。栈(LIFO)是先进后出的数据结构,而队列(FIFO)是先进先出的数据结构,因此我们将一个栈中的元素如果能够反转,再按照栈先进后出的规则即可模拟队列。我们知道队列先进先出,所以最后一个进的元素最后一个出。今天的题目看上去简单,实际写的时候一定要注意细节,比如到底是哪个栈或者队列pop元素,以及指针用完后要free掉等细节。明天补一下第九天的内容-KMP算法,加油!
2023-09-02 00:14:54 69
原创 代码随想录算法训练营第八天| 344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词、剑指Offer58-II.左旋转字符串
题目可以使用双指针叫上上一题的元素交换方式进行求解,关键是边界条件的判定问题,分为三个情况,1、恰好元素个数为偶数,2、剩余字符少于K个,3、剩余字符大于等于K个,小于2K个。、使用 O(1) 的额外空间解决这一问题”,但这个问题也能看出利用对半交换的方法可以快速满足题目要求。今天感觉总体来说还算简单,但写代码的时候存在不细心、容易出现数组越界的情况,希望之后更加细心,加油!看完Carl老哥给出的方法,感觉到翻转元素的妙处所在,具体内容参考。题目虽然要求说“不要给另外的数组分配额外的空间,你必须。
2023-08-30 23:52:56 47 1
原创 代码随想录算法训练营第七天| 454.四数相加II 、 383. 赎金信 、15. 三数之和 、18. 四数之和
这道题目刚看到的时候只有一个思路-暴力求解,但看到Carl老哥给出的提示后,才恍然大悟,想到用哈希表解决这个问题,对于哈希相关的内容,可以直接调用uthash.h库,但自己对于这个库的使用还是不熟练,看着库的使用方法,才能完成本题的书写。毫无疑问,看到题目第一反应暴力求解,但暴力求解也存在问题,因为我们要进行去重操作,所以暴力求解也不是一个好的方法。今天是比较艰难的一天,第一题就磕磕绊绊的,虽然过程艰难,但结果还是好的,提交成功的时候长舒一口气,不枉花费的时间,希望自己能够真正理解解题思路,继续加油!
2023-08-30 00:26:33 59 1
原创 代码随想录算法训练营第六天| 242.有效的字母异位词、349. 两个数组的交集 、202. 快乐数、1. 两数之和
看到题目的第一反应是,。这题标号竟然是1.。第三反应可以用哈希表,现将所有元素插入哈希表中,再遍历一次所有元素,遍历的同时,在哈希表中查找target-此时元素的值是否在哈希表中就可求解,思路没问题,但问题C语言中如何写这个哈希表呢,楼主只会取余法的哈希函数,这个方法需要确定哈希表长度,更具负载因子得到取余法中的除数5,但这个题目中存在负数,利用取余法构建哈希表似乎就不行了,心想如果有C++中的set和map就好了,通过百度,知道了C语言中也有个哈希库-uthash.h ,可以达到map的效果。
2023-08-29 00:35:47 52 1
原创 代码随想录算法训练营第四天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、160.链表相交 、142.环形链表II
很容易想到采用虚拟头节点的方式,然后定义双指针p,q,p指向虚拟头节点,q指向第一个节点,然后依次后移,然后改变节点指向,需要注意的是,在改变节点指向的时候, 一定注意先后顺序,不然很容易产生错误,另外一个问题是,移动过程中,循环的终止条件是什么,考虑终止时的情况,无非两种,一个是恰好p指向为NULL,这代表着节点总数为偶数,另一个是q指向为NULL,这种情况节点总数为奇数,因此终止条件为(p->next == NULL) || (p->next->next == NULL)。你能尝试使用一趟扫描实现吗?
2023-08-27 00:52:46 42
原创 代码随想录算法训练营第三天| 203.移除链表元素、707.设计链表 、 206.反转链表
这道题目就是考验基本功的能力,难在如何理清逻辑,写出代码,题目也有小陷阱,当我在调试的时候遇到了一个bug,出现在myLinkedListAddAtHead,这里需要注意的是,obj指针是通过值传递传进这个函数的,所以如果我们试图修改obj的值,其实主程序中的实参是不会改变的,我在myLinkedListAddAtHead函数里,试图改变obj的值,所以导致后面调试时一直通过不了,这里只有采用虚拟头节点的方式才能解决这个问题。接下来继续坚持加油吧!虚拟头节点最后的时候需要free,释放掉。
2023-08-26 00:19:03 30
原创 代码随想录算法训练营第二天| 977.有序数组的平方、 209.长度最小的子数组、 59.螺旋矩阵II
也做了,两个题目花了很久的时间才最终debug通过,两道题目的逻辑大致相同,但细节的地方还是有区别的,题号为54的题目如果采用“左闭右开”的思维去判断边界的话,当数据为一列数据或一行数据时,是要额外去处理的。54这道题目采用了“左闭右开”的写法,可以等价的处理各个处于正方形外侧的边,条理清晰。今天的三道题目,比昨天花了更久的时间,问题主要出现在写代码的时候,虽然思路正确,但写的逻辑比较混乱,导致debug时间花了很久,希望明天继续加油!感觉自己对于双指针的使用不灵活,凸显出自己的算法思维不强。
2023-08-25 00:17:43 124 1
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
看到题目的时候会感觉很简单,但当自己手写的时候,会一直被边界的取值困扰,到底能不能取到等于,自己写完后虽然代码通过了,但还是会对一些边界问题感到困扰,会有一种侥幸调试通过的感觉。空间经过仔细思考给出以下总结:1.我所选取的循环终止条件为left<right,考虑特殊情况,当target出现在最右边时,我们需要将其考虑进去,因此我们right的初始值需要为numsSize。
2023-08-22 22:56:05 325
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人