C++程序 已排序数组中最后一个重复元素
我们有一个有重复元素的已排序数组,并且我们必须找到最后一个重复元素的索引并打印它的索引,并打印出重复元素。如果找不到这样的元素,则打印一个消息。
例如:
输入:arr[] = {1, 5, 5, 6, 6, 7}
输出:
Last index: 4
Last duplicate item: 6
输入:arr[] = {1, 2, 3, 4, 5}
输出:未找到重复项
我们只需从数组中逆向迭代并比较当前和前一个元素。如果找到匹配,则打印索引和重复元素。因为这是排序数组,所以它将是最后一个重复项。如果找不到这样的元素,则会打印相应的消息。
1- for i = n-1 to 0
if (arr[i] == arr[i-1])
Print current element and its index.
Return
2- 如果找不到这样的元素,则打印无重复项的消息。
//打印已排序数组中最后一个重复元素及其
//索引
#include
void dupLastIndex(int arr[],int n){
//如果数组为空或大小小于等于0,则返回
if(arr==NULL||n<=0)
return;
//比较元素并返回最后的
//重复及其索引
for(int i=n-1;i>0;i--){
if(arr[i]==arr[i-1]){
printf("Last index: %d
Last "
"duplicate item: %d
",i,arr[i]);
return;
}
}
//如果到达这里,则未发现重复
//找到。
printf("未找到重复项");
}
int main(){
int arr[]={1,5,5,6,6,7,9};
int n=sizeof(arr)/sizeof(int);
dupLastIndex(arr,n);
return 0;
}
输出:
Last index: 4
Last duplicate item: 6
时间复杂度: O(n),其中n表示给定数组的大小。
辅助空间: O(1),不需要额外的空间,因此它是一个常数。