• 数组:双指针技巧


    双指针技巧 —— 情景一

    在前一章中,我们通过迭代数组来解决一些问题。通常,我们只使用从第一个元素开始并在最后一个元素结束的一个指针来进行迭代。 但是,有时候,我们可能需要同时使用两个指针来进行迭代。

    示例


    让我们从一个经典问题开始:

    反转数组中的元素。

    其思想是将第一个元素与末尾进行交换,再向前移动到下一个元素,并不断地交换,直到它到达中间位置。

    我们可以同时使用两个指针来完成迭代:一个从第一个元素开始,另一个从最后一个元素开始。持续交换它们所指向的元素,直到这两个指针相遇。

    以下代码可以供你参考:

    C++的:

    void reverse(int *v, int N) {
        int i = 0;
        int j = N - 1;
        while (i < j) {
            swap(v[i], v[j]);
            i++;
            j--;
        }
    }
    
    

    Java 的:

    public static void reverse(int[] v, int N) {
        int i = 0;
        int j = N - 1;
        while (i < j) {
            swap(v, i, j);  // this is a self-defined function
            i++;
            j--;
        }
    }
    

    总结


    总之,使用双指针技巧的典型场景之一是你想要

    从两端向中间迭代数组。

    这时你可以使用双指针技巧:

    一个指针从始端开始,而另一个指针从末端开始。

    值得注意的是,这种技巧经常在排序数组中使用。

  • 相关阅读:
    8/30 sql脚本
    navicat批量添加uuid去重
    循环向JsonArray添加对象
    java String字符串去除()里的内容
    工厂模式
    Thymeleaf学习
    SSH开发常用常见的src下建的包名
    04jQuery操作03
    04jQuery筛选jquery对象02
    04jQuery筛选jquery对象01
  • 原文地址:https://www.cnblogs.com/coding365/p/12872179.html
Copyright © 2020-2023  润新知