剑指offer
数组中只出现一次的数字
http://www.nowcoder.com/questionTerminal/e02fdb54d7524710a7d664d082bb7811
解题思路:以空间换时间,时间开销约为30ms;
①假定所有的数字都是在0-1000001之间;
定义数组count,用于统计0-1000001之间每个数字的出现次数;
②遍历数组array,统计中每个数字出现的次数;
for(int i=0;i<len;i++) {
count[array[i]]++;
}
③继续找出0-1000001出现次数为1的两个值,找到后终止循环;
例如:对于数组[4,6,2,2,3,3,8,8,9,9,1000000,1000000]
①定义数组count,其下标为0-1000001;
②遍历输入array,计算每个数字,其出现次数,如
count[4]=1; count[6]=1; count[2]=2; count[3]=2;
count[8]=2; count[9]=2; count[1000000]=2;
③遍历数组count,找出0-1000001出现次数为1的两个值(4,6),找到后终止循环。
public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { int len = array.length; int [] count = new int[1000001]; for(int i=0;i<len;i++) { count[array[i]]++; } int flag=0; for(int i=0;i<1000001;i++) { if(count[i]==1&&flag==0) { num1[0]=i; flag=1; } else if(count[i]==1&&flag==1) { num2[0]=i; break; } } } }