Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
这道题呢和之前的single number不同的就是【不是single number的number】出现次数变为了三次。
那么只有一个hashset再借助hashset的特性就比较难实现了。
不过如果用两个hashset的话就很简单了。一个用来store非single numbe,另一个在所有的非single number移除后剩下的就是要求的single number了。
因为这里的难点在于如果进行第三次hashset.add()的时候我们怎样判断这个number前面是否已经add过两次。
代码如下。~
public class Solution { public int singleNumber(int[] nums) { HashSet<Integer> store=new HashSet<Integer>(); HashSet<Integer> result=new HashSet<Integer>(); for(int i=0;i<nums.length;i++){ if(!result.add(nums[i])){ result.remove(nums[i]); store.add(nums[i]); }else{ if(store.contains(nums[i])){ result.remove(nums[i]); } } } return result.iterator().next(); } }
原文:http://www.cnblogs.com/orangeme404/p/4736114.html