首页 > 代码库 > 260. Single Number III

260. Single Number III

260. Single Number III

DescriptionHintsSubmissionsDiscussSolution
 
 
DiscussPick One

 

Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.

For example:

Given nums = [1, 2, 1, 3, 2, 5], return [3, 5].

Note:

  1. The order of the result is not important. So in the above example, [5, 3] is also correct.
  2. Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?

 

上两个的升级版,但是跟上两个思路又完全不同。真是。。。

两种做法,一个位运算肯定是技巧性很高的,一个是set维护。

Java set做法:

  遍历这个数组,第一次出现的添加进去,只要出现了第二次,则remove,剩下的就是单个了的数集合了,也适用用于找出数组中成对出现数中的所有单个数。最后把这个set集合元素添到数组就行了。

  查了资料,貌似不能直接把一个set集合转换成Array,toArray也只能装换成object,参考可见:https://ask.helplib.com/106360。

public class Solution {    public int[] singleNumber(int[] nums) {        Set<Integer> set = new HashSet<Integer>();        for(int n : nums) {            if(!set.contains(n)) {                set.add(n);            }else {                set.remove(n);            }        }                int[] ans = new int[set.size()];        int cnt = 0;                for(int n:set) {            ans[cnt++] = n;        }        return ans;    }}

 

位运算做法:

 

 

260. Single Number III