方法1:使用哈希表存储不重复的数字
import java.util.HashMap; public static void FindNumsAppearOnce1(int[] array,int[] num1,int[] num2){ HashMap<integer,integer> map=new HashMap<>(); for(int i=0;i<array.length;i++){ if(map.containskey(array[i])){ map.remove(array[i]); } else map.put(array[i],1); int a[]="new" int[array.length]; i="0;" for(int k : map.keyset()){ keyset()返回所有的键 a[i]="k;" i++; num1[0]="a[0];" num2[0]="a[1];" ``` public class solution { ** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 @param array int整型一维数组 @return int[] findnumsappearonce (int[] array) write code here hashmap<integer,integer> map=new HashMap<>(); for(int i=0;i<array.length;i++){ if(map.containskey(array[i])){ map.put(array[i],map.get(array[i])+1); } else{ map.put(array[i],1); int i="0;" int[] arr="new" int[2]; for (entry<integer, integer> entry : map.entrySet()) { if(entry.getValue()==1){ arr[i]=entry.getKey(); i++; } } return arr; } }
方法2:异或运算
把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因为成对儿出现的都抵消了。
//------------没看懂------------------- public void FindNumsAppearOnce2(int [] array,int num1[],int num2[]) { int eO = 0,eOne = 0; for(int num:array) eO ^=num; int firstOne = eO &(~eO +1);//求得二进制中第一位1,比如101和011得到010 for(int cur:array) if ((cur&firstOne) !=0) {//把第k位是1的一组找出来进行异或 eOne ^=cur; }//最终结果就是第k位是1且落单的那个 num1[0] = eOne; num2[0] = eOne^eO;//异或结果的运算规则。 }
</array.length;i++){></array.length;i++){></integer,integer>