只出现一次的数字 II(二)
上文我们把经典算法题‘只出现一次的数字 II’的题目描述与大家分享,本文旨在分享解题思路。
解决方案
综述
该问题看起来很简单,使用 Set 或 HashMap 可以在O(N)的时间和O(N)的空间内解决。
真正的挑战在于 Google 面试官要求使用常数空间解决该问题(最近 6 个月该问题在 Google 上非常流行),测试应聘者是否熟练位操作。

方法一:HashSet
将输入数组存储到 HashSet,然后使用 HashSet 中数字和的三倍与数组之和比较。

Python 实现
class Solution:def singleNumber(self, nums):return (3 * sum(set(nums)) - sum(nums)) // 2Java 实现
class Solution {public int singleNumber(int[] nums) {Set<Long> set = new HashSet<>();long sumSet = 0, sumArray = 0;for(int n : nums) {sumArray += n;set.add((long)n);}for(Long s : set) sumSet += s;return (int)((3 * sumSet - sumArray) / 2);}
}