题目:一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。
思路1:使用HashMap存上所有的数字,数字作为Key,Value为对应的出现次数。这种做法可以拓展到查找出现N次的数字。时间复杂服为O(N)+O(1) (建立Map的时间以及查找时间)
1 import java.util.HashMap; 2 import java.util.Map; 3 //num1,num2分别为长度为1的数组。传出参数 4 //将num1[0],num2[0]设置为返回结果 5 import java.util.Arrays; 6 7 public class Solution { 8 public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { 9 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 10 for(Integer i : array){ 11 if(map.containsKey(i)){ 12 map.put(i, map.get(i)+1); 13 }else{ 14 map.put(i, 1); 15 } 16 } 17 18 boolean flag = false; 19 for(Integer key : map.keySet()){ 20 21 if(map.get(key)==1){ 22 if(flag){ 23 num2[0] = key; 24 break; 25 } 26 num1[0] = key; 27 flag = true; 28 } 29 } 30 } 31 32 }
思路2:骚操作 https://www.nowcoder.com/questionTerminal/e02fdb54d7524710a7d664d082bb7811