C++程序 已排序数组中最后一个重复元素
在使用数组时,我们经常需要判断数组中是否存在重复元素。在排序后的数组中,我们可以通过遍历数组来找到最后一个重复元素。下面是一个通过 C++ 语言实现的示例代码。
#include <iostream>
using namespace std;
int findLastDuplicate(int arr[], int n) {
int i = 0, j = 1;
while (j < n) {
if (arr[i] != arr[j]) {
i++;
j++;
} else {
while (arr[j] == arr[i]) {
j++;
}
i = j - 1;
}
}
return arr[i];
}
int main() {
int arr[] = {1, 2, 3, 3, 4, 4, 4, 5, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int lastDuplicate = findLastDuplicate(arr, n);
cout << "The last duplicate element in the array is " << lastDuplicate << endl;
return 0;
}
代码说明
这是一个求已排序数组中最后一个重复元素的 C++ 程序。这个程序中,我们通过 findLastDuplicate
函数实现了对已排序数组的遍历,通过变量 i
和 j
分别记录本次重复元素的起始索引和下一个待比较的元素的索引。首先比较 arr[i]
和 arr[j]
两个元素是否相等,如果不相等则继续比较下一个元素。如果相等,则进入一个循环,这个循环主要是跳过连续的相等元素,在找到下一个不等于 arr[i]
的元素之后,我们将 i
赋值为 j - 1
,这样就为下一次比较做好了准备。
在主函数中,我们调用了 findLastDuplicate
函数并将数组和数组长度作为参数传递,最后输出了结果。在这里我们定义数组 arr
,并将含有重复元素的序列按升序排列。
结论
此外我们还需要注意的是,该算法中的循环结构中,两个变量 i
和 j
分别要指向相邻的元素,这样才能够顺利地进行对冲比较。如果指向的元素不相邻,则必然会出现错误的比较结果。