JAVA双指针

双指针主要分为快慢指针和左右指针两种。
快慢指针解决链表含环问题以及相差问题。
左右指针解决数组问题,左=0,右=length-1,二分查找等问题。


快慢指针


1.判断有无环:快指针一步走两个,慢指针一步一个,如果有环,最后指针会相遇;如果无环快指针先遇到null;
2.快慢指针可以寻找链表的中点(左右指针也可以)
3.相差问题,寻找链表的倒数第k个元素
快指针先走k步,然后快慢指针同时同速前进,当快指针遇到null时,慢指针到达倒数第k个节点。

Leetcode

在这里插入图片描述


左右指针


1.二分查找、有序的两数之和、反转数组
2.快速排序

    private static int partition(int[] array, int left, int right) {
        int key = array[left];
        int index = left;
        while (left < right) {

            while (left < right && array[right] <= key) {
                --right;
            }

            while (left < right && array[left] >= key) {
                ++left;
            }

            swap(array, left, right);
        }
        swap(array, right, index);
        return right;
    }

    private static void swap(int[] cost, int i, int j) {
        int temp = cost[i];
        cost[i] = cost[j];
        cost[j] = temp;
    }
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值