算法 之 双指针

大概说明

双指针一般用于加快循环速度,多条件查找等情况,比如 搜索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;
    }
相关推荐
郝学胜-神的一滴6 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
JH30737 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
颜酱7 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_736919108 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878388 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
Coder_Boy_8 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
DuHz8 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
invicinble8 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
Polaris北极星少女8 小时前
TRSV优化2
算法
较真的菜鸟8 小时前
使用ASM和agent监控属性变化
java