剑指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;
            }
        }
    }
}
全部评论

相关推荐

头像
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务