在整数数组中找到第一个重复元素

时间:2020-02-23 14:34:10  来源:igfitidea点击:

在本教程中,我们将看到如何在整数数组中找到第一个重复元素。

问题

在整数数组中找到第一个重复元素。
例如:

Input: array[] = {10, 7, 8, 1, 8, 7, 6}
Output: 7 [7 is the first element actually repeats]

解决方案

简单的解决方案将使用两个环。
外循环将迭代循环,内循环将检查元素是否重复,但此解决方案的时间复杂度将是O(n ^ 2)。

另一个解决方案是创建另一个数组并对其进行排序。
从原始数组中查看元素,并使用二进制搜索找到排序阵列中的元素,但此解决方案的时间复杂度将是O(n ^ logn)。
我们可以做得更好吗?
是的,我们可以从右到左右迭代,并使用Hashset来跟踪FineinIndex

  • 用-1 intialize finestIndex
  • 从右到左迭代输入数组
  • 如果元素已存在于hashset中,则将FinestIndIndex eldent元素更新为集合
  • 一旦我们完成迭代,我们将在最后获取Final线索

程序找到一个整数数组中的第一个重复元素

package org.igi.theitroad;
/* Java program to find first repeating element in arr[] */
import java.util.*; 
 
public class FirstRepatingElementMain 
{ 
	//This function prints the first repeating element in arr[] 
	static int getFirstRepeatingElementArray(int array[]) 
	{ 
		//Initialize index of first repeating element 
		int minimumIndex = -1; 
 
		//Creates an empty hashset 
		HashSet<Integer> set = new HashSet<>(); 
 
		//Iterate over the input array from right to left 
		for (int i=array.length-1; i>=0; i--) 
		{ 
			//If set contains the element, update minimum index 
			if (set.contains(array[i])) 
				minimumIndex = i; 
 
			else   //Else add element to hash set 
				set.add(array[i]); 
		} 
		return minimumIndex;
	} 
 
	public static void main (String[] args) throws java.lang.Exception 
	{ 
		int array[] = {10, 7, 8, 1, 8, 7, 6}; 
		int min=getFirstRepeatingElementArray(array); 
		//Print the result 
		if (min != -1) 
			System.out.println("The first repeating element in array is " + array[min]); 
		else
			System.out.println("There are no repeating elements"); 
	} 
}

运行上面的程序时,我们将得到以下输出:

The first repeating element in array is 7

该解决方案的时间复杂性是O(n),并且空间复杂性也是O(n)。