- 博客(3)
- 收藏
- 关注
原创 代码随想录算法训练营Day3|● 链表理论基础 ● 203.移除链表元素 ● 707.设计链表 ● 206.反转链表
犹豫链表只能从头结点开始,沿着next指针一步一步往下访问,无法访问上一个元素。因为要改变next指针的指向,又要不断往下遍历,这两者对自己定义的指针的方向要求是相反的。3)在访问、删除节点的时候,p指针的初始值并不一样,因为前者要求访问到该元素,后者要求访问到val的前一个结点从而删除val;2)private变量的声明要在struct结构之后,因为dummyNode要用到struct结构里的成员;4)每次删除一个结点,记得用delete语句释放结点的内存。代码最短,但是最抽象、难度最高的一个。
2024-07-06 18:54:18
539
原创 代码随想录算法训练营Day2 | 977. 有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
要把数组中的元素的平方从小到大排序,而数组本身又是从小到大(更准确的说是非递减顺序),那么平方值最大的元素肯定位于两端。具体的说,C++中,一维数组、二维数组都是内存地址连续的,java中一维数组是连续的,二维不是,二维的每一行的首地址是连续的,每一行首地址用指针指向行内的元素,每一行内也是连续的。这道题暴露了我写代码的误区:总是用直接数控制循环的边界,比如nums.size()-1,nums.size()-2,这导致一旦循环的边界需要变动的时候,需要不断调整直接数,最后就是越写越乱。
2024-07-04 22:12:37
1978
原创 代码随想录算法训练营Day1 | LeetCode 704. 二分查找、27. 移除元素。
看到题目第一想法是用空间换时间:新建一个数组tempArray,指针遍历到非val元素时,就把这个元素加入新数组,并记录下来加入tempArray的元素的数量;最后把tempArray的元素逐个赋值给原数组。1)区间是选择左闭右开、还是左闭右闭,前者的right边界在更新世更新为middle,循环的条件是left < right,因为left = right时区间内没有元素;因为slowIndex的指针是新数组的右边界,而这个数组是左闭右开的。我们需要的是一个新的数组,他的元素都不包含要剔除的val元素。
2024-07-03 17:47:30
763
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅