查找数组中只出现1次的数

题目
  • 一个整型数组里除了两个数字之外,其他的数字都出现了两次,请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)
示例
  • 例如输入数组{2, 4, 3, 6, 3, 2, 5 ,5},因为只有4 、6 这两个数字只出现一次,其他数字都出现了两次,所以输出4和6
解法
    public static int[] findItemAppearanceOnce(int[] arr) {
        if (arr == null || arr.length == 0) {
            throw new IllegalArgumentException("arr is invalid");
        }
        HashMap<Integer, Integer> data = new HashMap<>(arr.length);

        // 遍历添加数据
        for (int k : arr) {
            if (data.containsKey(k)) {
                data.put(k, 2);
            } else {
                data.put(k, 1);
            }
        }

        int[] num = new int[2];
        int count = 0;

        // 找出出现一次的数据存储到数组中
        for (int j : arr) {
            if (data.get(j) == 1) {
                if (count == 0) {
                    num[0] = j;
                    count++;
                } else {
                    num[1] = j;
                }
            }
        }

        return num;

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值