方法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>

京公网安备 11010502036488号