20211030 每日一题(leetcode260) 001

132 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

1. 题目

260.只出现过一次的数字
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按任意顺序返回答案。

2. 问题分析解决

2.1.哈希表法

数组元素作为 key 值,value 设置为数组元素出现次数,每次添加的时候查询下是否已经保存过,如果保存过就 +1, 最后从 Map 中遍历所有 value 为 1 的元素就是答案。

class Solution {
    public int[] singleNumber(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int cur = map.get(nums[i]) == null ? 1 : 2;
            map.put(nums[i], cur);
        }
        int[] result = new int[2];
        int cnt = 0;
        for (Integer key : map.keySet()) {
            if (map.get(key) == 1) {
                result[cnt++] = key;
            }
        }
        return result;
    }
}