双指针法总结(Java)

双指针题目总结

移除元素

  1. 是否有等于号(需要检查的时候要有;交换的时候可以没有)
  2. while循环里再有while还挺麻烦的(依旧要考虑外在循环),建议直接用if
  3. 注意索引和长度的关系。

反转字符串

记得left++;right–,不要形成死循环

替换数字

思路:从后往前填充数组

  1. 注意把变量写在for循环外边(Debug了好久!!!)
  2. str.charAt(i)是个方法,不要写成[]
int index = newchs.length - 1; // 一定注意写在外边
        for(int i = str.length() - 1; i >= 0; i--){      
            if(Character.isDigit(str.charAt(i))){
                newchs[index--] = 'r';
                newchs[index--] = 'e';
                newchs[index--] = 'b';
                newchs[index--] = 'm';
                newchs[index--] = 'u';
                newchs[index--] = 'n';
            }

反转字符串中的单词

  1. 去除首位和多余空格:不能在String上操作,转成StringBuffer。注意去除首位时要用循环不断缩小边界。
  2. 反转字符串:给出String/StringBuffer(StringBuffer可直接操作,String要转成字符串数组),返回值为Null即可

反转链表

给出两个指针,并在换方向之前记录下一个指针即可。

删除链表的倒数第N个结点

思路:关键是两个指针差n步
注意: 计算好是否有等于号

链表相交

  1. 当一个值不确定被赋予什么,使用三目表达式(eg:temp1 = temp1 != null ? temp1.next : headB;)
  2. 循环条件的判断放前还是放后

环形链表II

思路:找到两次相遇点
注意点:循环条件的判断:1. 不为空;2. 不相等(可以都在循环体内部写)

三数之和

思路:外循环+内循环(两个指针不断调整)
注意:while(index1 < index2){ // 注意何时有等于号,这里边如果有=,代表这个元素被加了两次

四树之和

思路:三个循环
注意:进行剪枝,taget注意复数;

总结

指针的作用:两个指针在一个for循环下完成两个for循环的工作

写博客的目的是每日督促并记录刷题,也欢迎大家批评指正~(day11)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值