使用 C++ 查找 1 到 n-1 之间唯一的重复元素


在这个问题中,我们得到一个大小为 N 的无序数组 arr[],其中包含从 1 到 N-1 的值,并且数组中有一个值出现了两次。我们的任务是*查找 1 到 n-1 之间唯一的重复元素*。

让我们举个例子来理解这个问题:

输入

arr[] = {3, 5, 4, 1, 2, 1}

输出

1

解决方案方法

解决此问题的一个简单方法是遍历数组,并对每个值查找该元素是否在数组中的其他位置存在。返回出现两次的值。

示例 1

程序说明了解决方案的工作原理

#include <iostream>
using namespace std;
int findRepValArr(int arr[], int n){
   for(int i = 0; i < n; i++)
   for(int j = i+1; j < n; j++)
   if(arr[i] == arr[j])
      return arr[i];
}
int main(){
   int arr[] = { 5, 3, 2, 6, 6, 1, 4 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The repetitive value in the array is "<<findRepValArr(arr, n);
   return 0;
}

输出

The repetitive value in the array is 6

解决此问题的另一种方法是利用以下事实:可以通过从 1 到 (N-1) 所有整数的和中减去数组和来找到数组中重复的值。

前 N-1 个自然数之和 (Sn) = n*(n-1)/2

doubleVal = arrSum - (Sn)

示例 2

程序说明了解决方案的工作原理

#include <iostream>
using namespace std;
int findRepValArr(int arr[], int n){
   int arrSum = 0;
   for(int i = 0; i < n; i++)
      arrSum += arr[i];
   int sn = (((n)*(n-1))/2);
   return arrSum - sn;
}
int main(){
   int arr[] = { 5, 3, 2, 6, 6, 1, 4 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The repetitive value in the array is "<<findRepValArr(arr, n);
   return 0;
}

输出

The repetitive value in the array is 6

更新于: 2022年2月11日

141 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.