标签:
一个int数组中的元素有这样的特点:两两出现,只有2个数字是单独的。
找到这2个数字,返回一个int数组。
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:
[5, 3]
is also correct.用Java实现,核心方法如下:
public static int[] singleNumber(int[] nums) { if(nums.length==2&&nums[0]!=nums[1]){ return 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]); } } } int[] print=new int[2]; print[0]=result.iterator().next(); result.remove(result.iterator().next()); print[1]=result.iterator().next(); return print; }
使用的是HashSet来存储数据
HashSet的add方法返回一个boolean值。第一次添加数据时返回true,再添加同样的数据时返回false
HashSet<Integer> test = new HashSet<Integer>(); System.out.print(test.add(1) + "\t"); System.out.print(test.add(1)); System.out.print("\n" + test.add(2) + "\t"); System.out.println(test.add(3)); for (int i = 1;i <= 3; i++){ System.out.print("item" + i + ":" + test.iterator().next() + "\t"); test.remove(test.iterator().next()); //删去当前值 }
其中数据“1”执行了2次添加操作;打印出
true false
true true
item1:1 item2:2 item3:3
可以看出添加2次,实际只有1个
利用add方法返回的Boolean值,能判断是否已经把数据添加进map中
标签:
原文地址:http://www.cnblogs.com/rustfisher/p/4771839.html