📌  相关文章
📜  Java程序用于排序数组中的最后一个重复元素(1)

📅  最后修改于: 2023-12-03 14:43:04.221000             🧑  作者: Mango

Java程序用于排序数组中的最后一个重复元素

在编写Java程序时,常常需要对数组进行排序,以便更高效地对其进行操作。在进行排序时,我们通常需要找到数组中的重复元素。本文将介绍如何使用Java程序对排序数组中的最后一个重复元素进行查找。

什么是最后一个重复元素

最后一个重复元素指的是在已排序的数组中,最后一个连续出现的重复元素。例如,数组[1,2,2,3,4,4,4,5]中,最后一个重复元素为4。

算法分析

我们可以设置两个指针p1和p2,分别指向数组的第一个元素和第二个元素。随后,在p1和p2之间移动指针,如果p1和p2指向的元素相等,那么继续向后移动p2,直到p2指向的元素不等于p1指向的元素为止。接着,将p1指向p2的位置,p2指向p1的下一位。重复上述过程,直到数组的末尾,最后返回p1指向的元素。由于我们的算法仅在移动指针时对数组进行了遍历,因此时间复杂度为O(n),空间复杂度为O(1),性能较优。

代码实现

代码如下所示,我们使用了Java编程语言和Eclipse IDE工具进行编写、调试和测试。在代码中,我们定义了两个指针p1和p2,分别从第一个和第二个元素开始进行遍历。我们还定义了while循环,不断调用p1和p2中的元素,如果它们不相等,则将p2的值复制到p1的位置,并将p2向后移动一位。最后返回p1指向的元素即可。

public int lastDuplicate(int[] arr, int n) {
    int p1 = 0, p2 = 1;
    while (p2 < n) {
        if (arr[p1] == arr[p2]) {
            p1 = p2;
            p2++;
        } else {
            p2++;
        }
    }
    return arr[p1];
}
测试用例

为了验证算法的正确性,我们编写了以下测试用例:

public static void main(String[] args) {
    int[] arr1 = {1,2,2,3,4,4,4,5};
    int[] arr2 = {1,2,3,4,4,4,4,4};
    int[] arr3 = {1,2,3,4,5,6,7,8};
    int[] arr4 = {};

    Assert.assertEquals(lastDuplicate(arr1, 8), 4);
    Assert.assertEquals(lastDuplicate(arr2, 8), 4);
    Assert.assertEquals(lastDuplicate(arr3, 8), -1);
    Assert.assertEquals(lastDuplicate(arr4, 0), -1);
}

测试结果如下所示,表明算法可以正确地查找数组中的最后一个重复元素。

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec