数据结构 java 在给定的整数数组中查找第一个非重复元素

例子:

输入: {-1, 2, -1, 3, 0}
输出: 2 说明: 第一个不重复的数字是: 2

输入: {9, 4, 9, 6, 7, 4}
输出: 6

方法1:双重循环,外部循环逐个选取元素,内部循环检查元素是否存在多次。 

时间复杂度:O(n*n), 检查每个元素 n 次
辅助空间: O(1)

public class _test {
    static int firstNonRepeating(int arr[], int n)
    {
        // 第一次循环遍历元素
        for (int i = 0; i < n; i++) {
            int j;
            // 第二次循环判断数是否重复
            for (j = 0; j < n; j++)
                if (i != j && arr[i] == arr[j])
                    break;

            //如果遍历完都没有重复,所以次数不重复,直接返回
            if (j == n)
                return arr[i];
        }

        return -1;
    }

    // Driver code
    public static void main(String[] args)
    {

        int arr[] = { 9, 4, 9, 6, 7, 4 };
        int n = arr.length;

        System.out.print(firstNonRepeating(arr, n));
    }
}



方法2:使用哈希表来存储每个数字出现的次数

时间复杂度:O(2n),遍历数组以映射频率,再次遍历阵列以检查频率。
辅助空间:O(n),创建用于存储频率的哈希表 

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

public class _test {
    static int firstNonRepeating(int arr[], int n)
    {


        //创建一个HashMap来存放元素及个数
        Map<Integer, Integer> m = new HashMap<>();
        for (int i = 0; i < n; i++) {
            //如果HashMap中已经存放该元素,则次数+1
            if (m.containsKey(arr[i])) {
                m.put(arr[i], m.get(arr[i]) + 1);
            }//如果该元素不在HashMap中,则第一次存入,次数为1
            else {
                m.put(arr[i], 1);
            }
        }

        //遍历查找第一个次数为1的元素返回
        for (int i = 0; i < n; i++)
            if (m.get(arr[i]) == 1)
                return arr[i];
        return -1;
    }

    // Driver code
    public static void main(String[] args)
    {
        int arr[] = { 9, 4, 9, 6, 7, 4 };
        int n = arr.length;
        System.out.println(firstNonRepeating(arr, n));
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值