zoukankan      html  css  js  c++  java
  • 数组:双指针技巧

    双指针技巧 —— 情景一

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

    示例


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

    反转数组中的元素。

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

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

    以下代码可以供你参考:

    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--;
        }
    }
    

    总结


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

    从两端向中间迭代数组。

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

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

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

  • 相关阅读:
    引号的区别
    QT中加载动态链接库
    QString 转换为 char *
    C++虚继承初识
    虚析构函数详解
    赋值兼容规则
    利用docker搭建spark hadoop workbench
    《用Java写一个通用的服务器程序》03 处理新socket
    《用Java写一个通用的服务器程序》02 监听器
    《用Java写一个通用的服务器程序》01 综述
  • 原文地址:https://www.cnblogs.com/coding365/p/12872179.html
Copyright © 2011-2022 走看看