给我们一个大小为n的数组arr []。编号从1到(n-1)以随机顺序排列。该数组只有一个重复元素。我们需要找到重复元素。
例子 :
Input : a[] = {1, 3, 2, 3, 4}
Output : 3
Input : a[] = {1, 5, 1, 2, 3, 4}
Output : 1
方法1(简单)我们使用两个嵌套循环。外循环遍历所有元素,内循环检查外循环拾取的元素是否出现在其他任何地方。
时间复杂度: O(n * n)
方法2(使用求和公式):我们知道前n-1个自然数的总和为(n – 1)* n / 2。我们计算数组元素的总和,并从中减去自然数总和,以找到唯一的缺失元素。
C++
// CPP program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
#include
using namespace std;
int findRepeating(int arr[], int n)
{
// Find array sum and subtract sum
// first n-1 natural numbers from it
// to find the result.
return accumulate(arr , arr+n , 0) -
((n - 1) * n/2);
}
// driver code
int main()
{
int arr[] = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << findRepeating(arr, n);
return 0;
}
Java
// Java program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
import java.io.*;
import java.util.*;
class GFG
{
static int findRepeating(int[] arr, int n)
{
// Find array sum and subtract sum
// first n-1 natural numbers from it
// to find the result.
int sum = 0;
for (int i = 0; i < n; i++)
sum += arr[i];
return sum - (((n - 1) * n) / 2);
}
// Driver code
public static void main(String args[])
{
int[] arr = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
int n = arr.length;
System.out.println(findRepeating(arr, n));
}
}
// This code is contributed by rachana soma
Python3
# Python3 program to find the only
# repeating element in an array where
# elements are from 1 to n-1.
def findRepeating(arr, n):
# Find array sum and subtract sum
# first n-1 natural numbers from it
# to find the result.
return sum(arr) -(((n - 1) * n) // 2)
# Driver Code
arr = [9, 8, 2, 6, 1, 8, 5, 3, 4, 7]
n = len(arr)
print(findRepeating(arr, n))
# This code is contributed
# by mohit kumar
C#
// C# program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
using System;
class GFG
{
static int findRepeating(int[] arr, int n)
{
// Find array sum and subtract sum
// first n-1 natural numbers from it
// to find the result.
int sum = 0;
for (int i = 0; i < n; i++)
sum += arr[i];
return sum - (((n - 1) * n) / 2);
}
// Driver code
public static void Main(String []args)
{
int[] arr = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
int n = arr.Length;
Console.WriteLine(findRepeating(arr, n));
}
}
/* This code contributed by PrinciRaj1992 */
C++
// CPP program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
#include
using namespace std;
int findRepeating(int arr[], int n)
{
unordered_set s;
for (int i=0; i
Java
import java.util.*;
// Java program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
class GFG
{
static int findRepeating(int arr[], int n)
{
HashSet s = new HashSet();
for (int i = 0; i < n; i++)
{
if (s.contains(arr[i]))
return arr[i];
s.add(arr[i]);
}
// If input is correct, we should
// never reach here
return -1;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
int n = arr.length;
System.out.println(findRepeating(arr, n));;
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 program to find the only
# repeating element in an array
# where elements are from 1 to n-1.
def findRepeating(arr, n):
s = set()
for i in range(n):
if arr[i] in s:
return arr[i]
s.add(arr[i])
# If input is correct, we should
# never reach here
rteurn -1
# Driver code
arr = [9, 8, 2, 6, 1, 8, 5, 3]
n = len(arr)
print(findRepeating(arr, n))
# This code is contributed
# by Shrikant13
C#
// C# program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
using System;
using System.Collections.Generic;
class GFG
{
static int findRepeating(int []arr, int n)
{
HashSet s = new HashSet();
for (int i = 0; i < n; i++)
{
if (s.Contains(arr[i]))
return arr[i];
s.Add(arr[i]);
}
// If input is correct, we should
// never reach here
return -1;
}
// Driver code
public static void Main(String[] args)
{
int []arr = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
int n = arr.Length;
Console.WriteLine(findRepeating(arr, n));;
}
}
// This code has been contributed by 29AjayKumar
C++
// CPP program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
#include
using namespace std;
int findRepeating(int arr[], int n)
{
// res is going to store value of
// 1 ^ 2 ^ 3 .. ^ (n-1) ^ arr[0] ^
// arr[1] ^ .... arr[n-1]
int res = 0;
for (int i=0; i
Java
// Java program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
class GFG
{
static int findRepeating(int arr[], int n)
{
// res is going to store value of
// 1 ^ 2 ^ 3 .. ^ (n-1) ^ arr[0] ^
// arr[1] ^ .... arr[n-1]
int res = 0;
for (int i = 0; i < n - 1; i++)
res = res ^ (i + 1) ^ arr[i];
res = res ^ arr[n - 1];
return res;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
int n = arr.length;
System.out.println(findRepeating(arr, n));
}
}
// This code is contributed by
// Smitha Dinesh Semwal.
Python3
# Python3 program to find the only
# repeating element in an array where
# elements are from 1 to n-1.
def findRepeating(arr, n):
# res is going to store value of
# 1 ^ 2 ^ 3 .. ^ (n-1) ^ arr[0] ^
# arr[1] ^ .... arr[n-1]
res = 0
for i in range(0, n-1):
res = res ^ (i+1) ^ arr[i]
res = res ^ arr[n-1]
return res
# Driver code
arr = [9, 8, 2, 6, 1, 8, 5, 3, 4, 7]
n = len(arr)
print(findRepeating(arr, n))
# This code is contributed by Smitha Dinesh Semwal.
C#
// C# program to find the
// only repeating element
// in an array where elements
// are from 1 to n-1.
using System;
class GFG
{
static int findRepeating(int []arr,
int n)
{
// res is going to store
// value of 1 ^ 2 ^ 3 ..
// ^ (n-1) ^ arr[0] ^
// arr[1] ^ .... arr[n-1]
int res = 0;
for (int i = 0; i < n - 1; i++)
res = res ^ (i + 1) ^ arr[i];
res = res ^ arr[n - 1];
return res;
}
// Driver code
public static void Main()
{
int []arr = { 9, 8, 2, 6, 1,
8, 5, 3, 4, 7 };
int n = arr.Length;
Console.Write(findRepeating(arr, n));
}
}
// This code is contributed
// by Smitha Dinesh Semwal.
PHP
C++
// CPP program to find the only
// repeating element in an array
// where elements are from 1 to n-1.
#include
using namespace std;
// Function to find repeted element
int findRepeating(int arr[], int n)
{
int missingElement = 0;
// indexing based
for (int i = 0; i < n; i++){
int element = arr[abs(arr[i])];
if(element < 0){
missingElement = arr[i];
break;
}
arr[abs(arr[i])] = -arr[abs(arr[i])];
}
return abs(missingElement);
}
// driver code
int main()
{
int arr[] = { 5, 4, 3, 9, 8,
9, 1, 6, 2, 5};
int n = sizeof(arr) / sizeof(arr[0]);
cout << findRepeating(arr, n);
return 0;
}
Java
// Java program to find the only
// repeating element in an array
// where elements are from 1 to n-1.
import java.lang.Math.*;
class GFG
{
// Function to find repeted element
static int findRepeating(int arr[], int n)
{
int missingElement = 0;
// indexing based
for (int i = 0; i < n; i++){
int element = arr[Math.abs(arr[i])];
if(element < 0){
missingElement = arr[i];
break;
}
arr[Math.abs(arr[i])] = -arr[Math.abs(arr[i])];
}
return Math.abs(missingElement);
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 5, 4, 3, 9, 8,
9, 1, 6, 2, 5};
int n = arr.length;
System.out.println(findRepeating(arr, n));
}
}
// This code is contributed by
// Smitha Dinesh Semwal.
Python3
# Python3 program to find the only
# repeating element in an array
# where elements are from 1 to n-1.
# Function to find repeted element
def findRepeating(arr, n):
missingElement = 0
# indexing based
for i in range(0, n):
element = arr[abs(arr[i])]
if(element < 0):
missingElement = arr[i]
break
arr[abs(arr[i])] = -arr[abs(arr[i])]
return abs(missingElement)
# Driver code
arr = [5, 4, 3, 9, 8, 9, 1, 6, 2, 5]
n = len(arr)
print(findRepeating(arr, n))
# This code is contributed by Smitha Dinesh Semwal.
C#
using System;
// C# program to find the only
// repeating element in an array
// where elements are from 1 to n-1.
public class GFG
{
// Function to find repeted element
public static int findRepeating(int[] arr, int n)
{
int missingElement = 0;
// indexing based
for (int i = 0; i < n; i++)
{
int element = arr[Math.Abs(arr[i])];
if (element < 0)
{
missingElement = arr[i];
break;
}
arr[Math.Abs(arr[i])] = -arr[Math.Abs(arr[i])];
}
return Math.Abs(missingElement);
}
// Driver code
public static void Main(string[] args)
{
int[] arr = new int[] {5, 4, 3, 9, 8, 9,
1, 6, 2, 5};
int n = arr.Length;
Console.WriteLine(findRepeating(arr, n));
}
}
// This code is contributed by Shrikant13
PHP
输出 :
8
时间复杂度: O(n)
辅助空间: O(1)
导致大型阵列溢出。
方法3(使用哈希):使用哈希表存储访问的元素。如果看到的元素再次出现,我们将其返回。
C++
// CPP program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
#include
using namespace std;
int findRepeating(int arr[], int n)
{
unordered_set s;
for (int i=0; i
Java
import java.util.*;
// Java program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
class GFG
{
static int findRepeating(int arr[], int n)
{
HashSet s = new HashSet();
for (int i = 0; i < n; i++)
{
if (s.contains(arr[i]))
return arr[i];
s.add(arr[i]);
}
// If input is correct, we should
// never reach here
return -1;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
int n = arr.length;
System.out.println(findRepeating(arr, n));;
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 program to find the only
# repeating element in an array
# where elements are from 1 to n-1.
def findRepeating(arr, n):
s = set()
for i in range(n):
if arr[i] in s:
return arr[i]
s.add(arr[i])
# If input is correct, we should
# never reach here
rteurn -1
# Driver code
arr = [9, 8, 2, 6, 1, 8, 5, 3]
n = len(arr)
print(findRepeating(arr, n))
# This code is contributed
# by Shrikant13
C#
// C# program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
using System;
using System.Collections.Generic;
class GFG
{
static int findRepeating(int []arr, int n)
{
HashSet s = new HashSet();
for (int i = 0; i < n; i++)
{
if (s.Contains(arr[i]))
return arr[i];
s.Add(arr[i]);
}
// If input is correct, we should
// never reach here
return -1;
}
// Driver code
public static void Main(String[] args)
{
int []arr = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
int n = arr.Length;
Console.WriteLine(findRepeating(arr, n));;
}
}
// This code has been contributed by 29AjayKumar
输出 :
8
时间复杂度: O(n)
辅助空间: O(n)
方法4(使用XOR):该想法基于x ^ x = 0且x ^ y = y ^ x的事实。
1)计算从1到n-1的元素的XOR。
2)计算数组元素的XOR。
3)以上两项的异或将是我们的结果。
C++
// CPP program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
#include
using namespace std;
int findRepeating(int arr[], int n)
{
// res is going to store value of
// 1 ^ 2 ^ 3 .. ^ (n-1) ^ arr[0] ^
// arr[1] ^ .... arr[n-1]
int res = 0;
for (int i=0; i
Java
// Java program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
class GFG
{
static int findRepeating(int arr[], int n)
{
// res is going to store value of
// 1 ^ 2 ^ 3 .. ^ (n-1) ^ arr[0] ^
// arr[1] ^ .... arr[n-1]
int res = 0;
for (int i = 0; i < n - 1; i++)
res = res ^ (i + 1) ^ arr[i];
res = res ^ arr[n - 1];
return res;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
int n = arr.length;
System.out.println(findRepeating(arr, n));
}
}
// This code is contributed by
// Smitha Dinesh Semwal.
Python3
# Python3 program to find the only
# repeating element in an array where
# elements are from 1 to n-1.
def findRepeating(arr, n):
# res is going to store value of
# 1 ^ 2 ^ 3 .. ^ (n-1) ^ arr[0] ^
# arr[1] ^ .... arr[n-1]
res = 0
for i in range(0, n-1):
res = res ^ (i+1) ^ arr[i]
res = res ^ arr[n-1]
return res
# Driver code
arr = [9, 8, 2, 6, 1, 8, 5, 3, 4, 7]
n = len(arr)
print(findRepeating(arr, n))
# This code is contributed by Smitha Dinesh Semwal.
C#
// C# program to find the
// only repeating element
// in an array where elements
// are from 1 to n-1.
using System;
class GFG
{
static int findRepeating(int []arr,
int n)
{
// res is going to store
// value of 1 ^ 2 ^ 3 ..
// ^ (n-1) ^ arr[0] ^
// arr[1] ^ .... arr[n-1]
int res = 0;
for (int i = 0; i < n - 1; i++)
res = res ^ (i + 1) ^ arr[i];
res = res ^ arr[n - 1];
return res;
}
// Driver code
public static void Main()
{
int []arr = { 9, 8, 2, 6, 1,
8, 5, 3, 4, 7 };
int n = arr.Length;
Console.Write(findRepeating(arr, n));
}
}
// This code is contributed
// by Smitha Dinesh Semwal.
的PHP
输出:
8
时间复杂度:O(n)
辅助空间:O(1)
方法5:使用索引。
1.遍历数组。
2.对于每个索引访问a [index],如果为正,则更改a [index]索引处元素的符号,否则打印该元素。
C++
// CPP program to find the only
// repeating element in an array
// where elements are from 1 to n-1.
#include
using namespace std;
// Function to find repeted element
int findRepeating(int arr[], int n)
{
int missingElement = 0;
// indexing based
for (int i = 0; i < n; i++){
int element = arr[abs(arr[i])];
if(element < 0){
missingElement = arr[i];
break;
}
arr[abs(arr[i])] = -arr[abs(arr[i])];
}
return abs(missingElement);
}
// driver code
int main()
{
int arr[] = { 5, 4, 3, 9, 8,
9, 1, 6, 2, 5};
int n = sizeof(arr) / sizeof(arr[0]);
cout << findRepeating(arr, n);
return 0;
}
Java
// Java program to find the only
// repeating element in an array
// where elements are from 1 to n-1.
import java.lang.Math.*;
class GFG
{
// Function to find repeted element
static int findRepeating(int arr[], int n)
{
int missingElement = 0;
// indexing based
for (int i = 0; i < n; i++){
int element = arr[Math.abs(arr[i])];
if(element < 0){
missingElement = arr[i];
break;
}
arr[Math.abs(arr[i])] = -arr[Math.abs(arr[i])];
}
return Math.abs(missingElement);
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 5, 4, 3, 9, 8,
9, 1, 6, 2, 5};
int n = arr.length;
System.out.println(findRepeating(arr, n));
}
}
// This code is contributed by
// Smitha Dinesh Semwal.
Python3
# Python3 program to find the only
# repeating element in an array
# where elements are from 1 to n-1.
# Function to find repeted element
def findRepeating(arr, n):
missingElement = 0
# indexing based
for i in range(0, n):
element = arr[abs(arr[i])]
if(element < 0):
missingElement = arr[i]
break
arr[abs(arr[i])] = -arr[abs(arr[i])]
return abs(missingElement)
# Driver code
arr = [5, 4, 3, 9, 8, 9, 1, 6, 2, 5]
n = len(arr)
print(findRepeating(arr, n))
# This code is contributed by Smitha Dinesh Semwal.
C#
using System;
// C# program to find the only
// repeating element in an array
// where elements are from 1 to n-1.
public class GFG
{
// Function to find repeted element
public static int findRepeating(int[] arr, int n)
{
int missingElement = 0;
// indexing based
for (int i = 0; i < n; i++)
{
int element = arr[Math.Abs(arr[i])];
if (element < 0)
{
missingElement = arr[i];
break;
}
arr[Math.Abs(arr[i])] = -arr[Math.Abs(arr[i])];
}
return Math.Abs(missingElement);
}
// Driver code
public static void Main(string[] args)
{
int[] arr = new int[] {5, 4, 3, 9, 8, 9,
1, 6, 2, 5};
int n = arr.Length;
Console.WriteLine(findRepeating(arr, n));
}
}
// This code is contributed by Shrikant13
的PHP
输出 :
9
时间复杂度: O(n)
辅助空间: O(1)