剑指 Offer 56 - II. 数组中数字出现的次数 II
题目描述
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例:
输入:nums = [3,4,3,3]
输出:4
示例:
输入:nums = [9,1,7,9,7,9,7]
输出:1
解题思路:
看到这个题头脑中第一次跳出来的想法是用HashMap,直接统计然后选出来小统计数量为1的那个,简单直接暴力,say干就干,迅速写好如下代码,竟然一次跑过了,开心,但是效率好低呀,题解区域探索一波,觉得自己是个智障,好家伙直接位运算,有限自动机,真难。就贴一下自己写的代码吧。
程序代码
class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer,Integer> hash = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
// 判断是否存在,不存在加入
if(hash.get(nums[i])==null) {
hash.put(nums[i], 1);
}else {
hash.put(nums[i], hash.get(nums[i])+1);
}
}
for(Integer a:hash.keySet()) {
if(hash.get(a)==1) return a;
}
return 0;
}
}
题目来源
LeetCode,剑指Offer