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

相关推荐

点赞 评论 收藏
分享
但听说转正率很低,我现在有在实习了,好纠结要不要去
熬夜脱发码农:转正率低归低,但是实习的经历你可以拿着,又不是说秋招不准备了
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务