数组:
一般考虑:双指针/数组翻转,可以减少空间复杂度
- 轮转数组
数组向左/向右轮转,首先考虑翻转数组。这样空间复杂度为O(1),比使用额外空间更好
PS:k = k % nums.size();注意轮转的次数大于数组本身长度的情况。
27.移除元素
使用双指针,left && right,实现原地删除元素,最终left代表删除后的数组长度
left代表赋值指针
right代表下一步要处理的指针
双指针可以都从头开始,最多遍历2遍
也可以从首尾向中间移动,直到2指针相遇,只遍历一次。
时间复杂度O(n),空间复杂度为O(1)
易错:
- 注意临界条件,特别考虑为空,为0的情况
链表:
- 对链表进行操作时通常在头部增加一个虚拟节点,方便进行增加删除等操作,(特别是对第一个节点操作时,当前驱节点为空时,使用虚拟节点更加方便。)
- 当
l1->next == NULL
时,不要到l1 = NULL
再创建节点,这样相当于重新创建一个新的节点/链表,与l1
之前的节点联系丢失了。最好在l1->next == NULL
时,就创建新的节点,不要移动到下一个空节点上创建。
正在更新中……