LeetCode85|只出现一次的数字III

时间:2022-07-26
本文章向大家介绍LeetCode85|只出现一次的数字III,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1,问题简述

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。

找出只出现一次的那两个元素。

2,示例

示例 :

输入: [1,2,1,3,2,5]
输出: [3,5]
注意:

结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?

3,题解思路

本题不使用常量数空间来做,基本满足题解的正确性,所以使用了键值对集合的hashMap来做了,不过空间复杂度比较高嘛

4,题解程序


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class SingleNumberTest3 {
    public static void main(String[] args) {
        int[] nums = {1, 2, 1, 3, 2, 5};
        int[] singleNumber = singleNumber(nums);
        for (int num : singleNumber
        ) {
            System.out.print(num + "t");
        }
    }

    public static int[] singleNumber(int[] nums) {
        if (nums == null || nums.length == 0) {
            return new int[0];
        }
        HashMap<Integer, Integer> hashMap = new HashMap<>(nums.length);
        for (int num : nums
        ) {
            hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);
        }
        List<Map.Entry<Integer, Integer>> entryList = hashMap.entrySet().stream().filter(x -> x.getValue() == 1)
                .collect(Collectors.toList());
        int[] result = new int[2];
        IntStream.range(0, entryList.size()).forEachOrdered(i -> result[i] = entryList.get(i).getKey());
        return result;
    }
}

5,题解程序图片版

6,总结

目前也说,使用键值对集合hashMap做的题也不少,可见键值对集合在我们的应用中使用的频率非常高,这也是为什么要去懂它的元音之一吧,这里就不过多介绍这个集合了,有需要的话可以自己查阅一下资料自己看看吧,这不是我们最近要重点强调的内容