算法 之 双指针

大概说明

双指针一般用于加快循环速度,多条件查找等情况,比如 搜索nums是否包含target、nums是否存在两个数之和等于target。

留模板自用~

搜索nums是否包含target

java 复制代码
    public static int search(int[] nums, int target) {
        int len = nums.length;
        int l = 0 ,r = len - 1;
        //记录目标值下标
        int index = -1;

        while(l < r){
            int mid = (r-l) / 2 + l;//求出中间下标 (数据类型)
            if(nums[mid] > target) r--; //大于目标值 移动右指针
            else if(nums[mid] < target) l++; //小于目标值 移动左指针
            else{
                index = mid;//等于目标值 记录下标值 结束循环
                break;
            }
        }
        return index;
    }

nums是否存在两个数之和等于target

java 复制代码
public static int[] getSum(int[] nums, int target) {
        Arrays.sort(nums);
        int len = nums.length;
        int l = 0 ,r = len - 1;

        int[] ans = new int[2];
        while(l < r){
            int num = nums[l] + nums[r];// 求和
            if(num > target) r--; //大于目标值 r左移减少
            else if(num < target) l++; //小于目标值 l右移增大
            else{
                ans[0] = nums[l];//等于目标值结束循环
                ans[1] = nums[r];
                break;
            }
        }
        return ans;
    }

快慢指针 删除倒数第N个节点

java 复制代码
public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummyNode = new ListNode();
        dummyNode.next = head;
        ListNode fastNode = dummyNode;
        ListNode slowNode = dummyNode;
        // fastNode 先走n步,slowNode在原点,它们相距5步
        while (n-- > 0 && fastNode.next != null) {
            fastNode = fastNode.next;
        }
        // fastNode 走完的时候,slow刚好是倒数n个
        while (fastNode.next != null) {
            fastNode = fastNode.next;
            slowNode = slowNode.next;
        }
        // 此时slowNode就是待删除节点的前一个节点
        slowNode.next = slowNode.next.next;
        return dummyNode.next;
    }
相关推荐
郝学胜-神的一滴几秒前
干货版《算法导论》07:递归视角下的选择排序与归并排序
java·数据结构·c++·python·程序人生·算法·排序算法
csdn_aspnet8 分钟前
javascript 算法 LeetCode 编号 70 - 爬楼梯
开发语言·javascript·算法·leetcode·ecmascript
掉鱼的猫13 分钟前
Solon Server 启动模式深度解析:从 0.3MB 内核到 10+ Server 插件
java·http
shehuiyuelaiyuehao14 分钟前
多线程入门
java·python·算法
星夜夏空9914 分钟前
FreeRTOS学习(7)——任务列表
java·前端·学习
Navigator_Z17 分钟前
LeetCode //C - 1073. Adding Two Negabinary Numbers
c语言·算法·leetcode
han_hanker20 分钟前
BeanUtils.copyProperties 和序列化的问题
java·开发语言·spring boot
醇氧23 分钟前
【OpenClaw】更换阿里百炼完整配置指南
算法·ai
野生技术架构师23 分钟前
牛客网2026互联网大厂Java面试题汇总,附官方级答案解析
java·开发语言
Tina学编程33 分钟前
[HOT100]每日一练------最长连续序列
算法·hot 100