一.移除元素
#27.移除元素(简单)
1.语法
2.思路
-
暴力解法
-
双指针法(快慢指针):时间复杂度:O(n) 空间复杂度:O(1)
int slow=0;int fast=0;
-
相向双指针法:
int left=0; int right=nums.size()-1;
基于元素顺序可以改变的题目描述改变了元素相对位置,确保了移动最少元素 * 时间复杂度:O(n) * 空间复杂度:O(1)
#26. 删除有序数组中的重复项(简单)
1.语法
2.思路
- 双指针法(快慢指针)
#283. 移动零(简单)
1.语法
2.思路
- 双指针法(快慢指针)
#844. 比较含退格的字符串(简单)
1.语法
s.substr(0, slow1)
将从字符串s
的索引0开始,提取长度为slow1
的子串。
2.思路
#977. 有序数组的平方(简单)×
1.语法
-
vector<int> res(n); // 创建一个有 n 个元素的 vector 对象
2.思路
-
直接排序(排序算法)
-
双指针(先把指针移到最接近0的负数位置,再向两边移动)
-
双指针(前后边缘双向移动 放的时候 逆序放入数组)
二.反转字符串
#344. 反转字符串
1.语法
-
swap(s[i],s[j]);
-
reverse(str.begin(), str.end());
2.思路
- 双指针法
- 使用栈
- 使用
reverse(str.begin(), str.end());
- 使用切片
- 使用列表推导
3.swap可以有两种实现。
一种就是常见的交换数值:
int tmp = s[i];
s[i] = s[j];
s[j] = tmp;
一种就是通过位运算:
s[i] ^= s[j];//将 s[i] 和 s[j] 进行异或运算,并将结果存储回 s[i]
s[j] ^= s[i];//将 s[j] 和上一步结果 s[i] ^ s[j] 进行异或运算
s[i] ^= s[j];//将上一步结果 s[i] 和原始的 s[j] 进行异或运算
三.替换空格
LCR 122. 路径加密
1.语法
2.思路
- 直接替换
- 双指针法()
#附录
- 学习内容大多来源于https://programmercarl.com/(代码随想录)
- #111 代表力扣题库题号111