| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1577 人关注过本帖
标题:太多年没接触了
只看楼主 加入收藏
小白100107
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-10-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
太多年没接触了
写一个程序,在长度为N的整数型数组a[ ]中寻找出现至少(N/2+1)次的值,如果存在这样的值,例如,如果a[ ]数组由2,3,2,2,2,3,2,1构成,那么程序应该输出2,因为2出现了5次>N/2次。试着想一个办法,使实现这个功能的计算复杂度为线性(即O(N)),如果你想到一个简单的算法使它能在线性复杂度上实现,在a数组由1,2,3,4,5,。。。。直到N,等元素构成,这样情况下,你的算法要进行多少次比较才能够确定在这个数组中不存在符合条件的值

搜索更多相关主题的帖子: 数组 出现 存在 复杂度 算法 
2017-10-16 06:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:4 
看多大的数据了

DO IT YOURSELF !
2017-10-16 08:52
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:4 
排序可以吗
2017-10-16 08:54
hackrol
Rank: 4
来 自:世界和平组织
等 级:业余侠客
帖 子:62
专家分:267
注 册:2014-9-6
收藏
得分:4 
2N次比较 吧
2017-10-16 10:54
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:4 
程序代码:
#include <stdio.h>

void foo( const int a[], size_t n )
{
    int candidate = 0;

    size_t cnt = 0;
    for( size_t i=0; i!=n; ++i )
    {
        if( a[i] == candidate )
            ++cnt;
        else if( cnt < 1 )
            candidate = a[i];
        else
            --cnt;
    }

    cnt = 0;
    for( size_t i=0; i!=n; ++i )
    {
        if( a[i] == candidate )
            ++cnt;
    }

    if( cnt > n/2 )
        printf( "the number is: %d\n", candidate );
    else
        puts( "nobody" );
}

int main( void )
{
    int a[] = { 2, 3, 2, 2, 2, 3, 2, 1 };
    foo( a, sizeof(a)/sizeof(*a) );
}
2017-10-16 13:22
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:4 
原理是这样的~不知道这样理解对不对~

数据中如果有N/2个相同的元素则必然是连续出现次数最多的~只要找连续出现次数最多的并判断是否满足条件就可以了~

PS:参考r版代码后又新发现了一点就是满足条件的不仅是连续出现次数最多的而且还是在包括不连续的所有片段中的长度也是最长的~所以数组数据就连续和不连续的两个整体~

[此贴子已经被作者于2017-10-16 17:37编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-10-16 17:17
快速回复:太多年没接触了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.069668 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved