代码随想录——双指针法学习记录

一.移除元素

#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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值