算法 之 双指针

大概说明

双指针一般用于加快循环速度,多条件查找等情况,比如 搜索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;
    }
相关推荐
CoderCodingNo1 小时前
【NOIP】2011真题解析 luogu-P1003 铺地毯 | GESP三、四级以上可练习
算法
翊谦1 小时前
Java Agent开发 Milvus 向量数据库安装
java·数据库·milvus
晓晓hh1 小时前
JavaSE学习——迭代器
java·开发语言·学习
iFlyCai1 小时前
C语言中的指针
c语言·数据结构·算法
查古穆1 小时前
栈-有效的括号
java·数据结构·算法
再一次等风来1 小时前
近场声全息(NAH)仿真实现:从阵列实值信号到波数域重建
算法·matlab·信号处理·近场声全息·nah
汀、人工智能1 小时前
16 - 高级特性
数据结构·算法·数据库架构·图论·16 - 高级特性
大熊背2 小时前
利用ISP离线模式进行分块LSC校正的方法
人工智能·算法·机器学习
Java面试题总结2 小时前
Spring - Bean 生命周期
java·spring·rpc
硅基诗人2 小时前
每日一道面试题 10:synchronized 与 ReentrantLock 的核心区别及生产环境如何选型?
java