寻找发帖水王

来源:互联网 发布:网络正常朋友圈发不了 编辑:程序博客网 时间:2024/05/01 13:58
《编程之美》的思路:如果一个ID的发帖数超过总数的一半,那么该ID在每个局部范围内也是超过一半的,因此用相互抵消的方法来确定发帖超过一半的ID。算法如下:
#include <stdio.h>#include <stdlib.h>#define NUM 10int get_post_king(int ID[], int N){    int candidate,i,times;    for(times = i=0;i<NUM;i++){        if(times == 0){            candidate = ID[i];            times = 1;        }else{            if(candidate == ID[i])                times++;            else{                times--;            }        }          }    return candidate;}int main(){    int sample[NUM] = {6,6,6,4,5,6,6,9,8,6};    printf("%d\n",get_post_king(sample,NUM));}

在get_post_king中如果ntimes已经为0,说明在已经遍历的部分,没有任何一个candidate是超过一半的,因此需要从当前元素ID[i]重新开始继续遍历,如果ID[i]和candidate相同,那么就ntimes++,如果不相同就ntimes--。


原创粉丝点击