使用 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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP