重复元素问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

重复元素问题

一道笔试题,时间复杂度要求O(N)
int数组中有三个元素出现的次数超过元素总个数的1/4,在规定时间复杂度下,求出这三个数。
我的思路,交卷的一刹那,我发现自己考虑非常不全面。
定义三个变量,保存三个数,在定义三个计数器,开始把a[0],a[1],a[2]赋给三个变量(这里有问题,万一重复了),然后对后面的数组扫描,出现相等的计数器加一,不相等计数器减一。

已经通知下午2点面试,晚上再跟大家探讨下,这题其实跟数组中有元素超过数组一半是一类问题吧,可能考虑起来要复杂点。

请用C/C++实现,Java我不熟。

展开
收起
a123456678 2016-06-08 20:59:43 1826 0
1 条回答
写回答
取消 提交回答
  • void find3(int * ID, int n)
    {
        int candidate[3];
        int nTimes[3] = {0};
        int i;
        for (i = 0; i < n; i++)
        {
            if(nTimes[0] == 0)
            {
                if(ID[i] == candidate[1])
                    nTimes[1]++;
                else if (ID[i] == candidate[2])
                    nTimes[2]++;
                else
                    {
                        candidate[0] = ID[i];
                        nTimes[0]++;
                    }
            }
            else if (nTimes[1] == 0)
            {
                if(ID[i] == candidate[0])
                    nTimes[0]++;
                else if (ID[i] == candidate[2])
                    nTimes[2]++;
                else
                    {
                        candidate[1] = ID[i];
                        nTimes[1]++;
                    }
            }
            else if (nTimes[2] == 0)
            {
                if(ID[i] == candidate[0])
                    nTimes[0]++;
                else if (ID[i] == candidate[1])
                    nTimes[1]++;
                else
                {
                    candidate[2] = ID[i];
                    nTimes[2]++;
                 }
            }
            else
           {
                if(ID[i] == candidate[0])
                    nTimes[0]++;
                else if(ID[i] == candidate[1])
                    nTimes[1]++;
                else if(ID[i] == candidate[2])
                    nTimes[2]++;
                else
                    nTimes[0]--, nTimes[1]--, nTimes[2]--;
            }
        }
    printf("三个水王ID分别是:%d,%d,%d\n", candidate[0], candidate[1], candidate[2]);
    }
    2019-07-17 19:32:44
    赞同 展开评论 打赏
问答分类:
问答地址:
相关产品:
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载