算法 之 双指针

大概说明

双指针一般用于加快循环速度,多条件查找等情况,比如 搜索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;
    }
相关推荐
坚持编程的菜鸟5 小时前
模拟实现memmove
c语言·算法·模拟实现memmove
码农颜6 小时前
5.4.1 锁分类
java·数据库·mysql
wabs6667 小时前
关于图论【最短路径之Dijkstra算法(堆优化版)|卡码网47.参加科学大会的思考】
数据结构·算法·图论·优先级队列·邻接表·小顶堆·卡码网
坚持编程的菜鸟7 小时前
编写判断大小端程序
c语言·算法·判断大小端
papaofdoudou7 小时前
判断排列逆序奇偶性的乘积判别法(范德蒙德符号法)
人工智能·算法
linux-hzh8 小时前
百日算法修炼 · Day 03
java·算法
问商十三载8 小时前
RAG 检索效果差怎么排查?2026 五层诊断法完整指南
开发语言·人工智能·windows·python·算法
不负岁月无痕8 小时前
简单理解操作系统结构
java·linux·c语言·开发语言·c++·面试
mister_guo9 小时前
Java线程池参数应该如何设置(ThreadPoolExecutor)
java
余额瞒着我当琳9 小时前
C++模板初阶与STL初探
android·java·c++