一、方法一

     (1)运用hashMap的方法

/*
解法2:
(1)思路:这个可以可以使用一个Map,Map对应的键值key就是数组中的元素,value就是这个元素出现的次数。这样我
通过一次遍历数组中的元素,如果元素出现在map中,则将其对应的value加1,否则将元素添加到map中,这样遍历一遍数组,我们就可以得到数组中每个元素对应出现的次数,然后再通过遍历一遍map,返回value为1对应的key就是我们需要求得元素。
(2)时间复杂度:因为首先需要遍历一遍数组,时间开销为O(n),构建完map后需要遍历一遍map找到value为1的元素,而map的个数为n/2,时间开销为O(n/2),所以总的时间开销为O(n)。
(3)空间复杂度:因为需要建立一个map,而且最后map的大小为n/2,所以空间复杂度为O(n)。
*/
    public static void findNumsAppearOnce1(int[] arr) {
        //Map对应的键值key就是数组中的元素,value就是这个元素出现的次数
        Map<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
        for (int i : arr) {
            if (hashMap.containsKey(i)) {
                hashMap.put(i, hashMap.get(i) + 1); //如果存在,value值加1
            } else {
                hashMap.put(i, 1); //如果不存在,存入hashMap,value值等于1
            }
        }

        //遍历一遍map,返回value为1对应的key就是我们需要求得元素
        Set<Integer> set = hashMap.keySet();
        for (int i : set) {
            if (hashMap.get(i) == 1) {
                System.out.print(i+" ");
            }
        }
    }
View Code

相关文章: