1. 字符串总结
1.1 双指针法
- 反转字符串
- 替换空格,通过判断空格数量,进而增加原数组长度,设置一前一后双指针替换
- 反转字符串里面的单词 —> 删除冗余空格
1.2反转系列
-
反转字符串II: 只需要用start和end变量,确定好要反转的区间,然后用一个for循环控制每次遍历区间,依次反转即可
-
反转单词:①先去多余空格②整体反转==(保证单词位置进行了反转)==③每个单词局部反转,做到了单词的反转
-
左旋字符串:局部反转 + 局部反转 + 整体反转
2. 双指针总结
2.1 数组
- 移除元素—两个指针(快慢指针)在一次遍历下完成任务,其实降低时间复杂度的因素是避免了两个for循环中很多无用的操作
2.2 字符串
- 反转字符串
- 替换空格,通过判断空格数量,进而增加原数组长度,设置一前一后双指针替换
- 反转字符串里面的单词 —> 删除冗余空格
2.3 链表
-
反转链表
-
环形链表
使用快慢指针(双指针法),分别定义 fast 和 slow指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。
2.4 N数之和
-
通过前后两个指针不算向中间逼近,在一个for循环下完成两个for循环的工作。
-
四数之和,其实思路是一样的,在三数之和的基础上再套一层for循环,依然是使用双指针法。
-
因此,用双指针法可以将N数之和的时间复杂度降低到O(NN-1)
2.5 总结
双指针法可以将N数之和的时间复杂度降低到O(NN-1)
2.5 总结
双指针说白了还是对数据相对位置的把控,同时对数据进行操作,节省了时间