Java统计第一个出现的重复数字

在编程中,我们经常需要处理数组或列表,找出其中重复的元素。这在很多实际应用中都非常有用,比如数据分析、算法竞赛等。本文将介绍如何使用Java语言统计数组中第一个出现的重复数字。

问题描述

给定一个整数数组,找出数组中第一个出现的重复数字。如果数组中没有重复数字,则返回-1。

算法思路

解决这个问题,我们可以使用哈希表(HashMap)来存储数组元素及其出现次数。遍历数组,对于每个元素,我们检查它是否已经在哈希表中:

  • 如果不在,我们将其添加到哈希表中,并记录其出现次数为1。
  • 如果已经在哈希表中,说明我们找到了第一个重复的数字,返回这个数字。

这种方法的时间复杂度为O(n),其中n是数组的长度,因为我们只需要遍历一次数组。

代码实现

以下是使用Java实现的代码示例:

import java.util.HashMap;
import java.util.Map;

public class FirstDuplicate {
    public static int findFirstDuplicate(int[] nums) {
        Map<Integer, Integer> numCounts = new HashMap<>();
        
        for (int num : nums) {
            if (numCounts.containsKey(num)) {
                return num;
            }
            numCounts.put(num, 1);
        }
        
        return -1;
    }

    public static void main(String[] args) {
        int[] nums = {2, 3, 1, 3, 2, 3, 4, 3, 2};
        int result = findFirstDuplicate(nums);
        System.out.println("第一个出现的重复数字是: " + result);
    }
}

关系图

为了更直观地展示数组和哈希表之间的关系,我们可以使用Mermaid语法绘制一个关系图:

erDiagram
    nums ||--o| numCounts : "contains"
    nums {
        int num1
        int num2
        int num3
    }
    numCounts {
        int key
        int value
    }

在这个关系图中,nums数组中的每个元素(num1num2num3等)都与numCounts哈希表中的一个键值对相关联。如果数组中的某个元素在哈希表中已经存在,说明它是一个重复数字。

结论

通过使用哈希表,我们可以高效地找出数组中第一个出现的重复数字。这种方法的时间复杂度为O(n),空间复杂度为O(n),适用于大多数实际应用场景。希望本文能帮助你更好地理解和解决这类问题。