bzoj 2456: mode

给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。

这道题是一道水题,但说它是难题也不为过。

一开始冥思苦想,因为空间太小,感觉根本没法下手。

后来看了题解后学会了一种很神奇的办法。

具体看代码:

var
  n,now,x,tot:longint;
begin
  readln(n);
  tot:=1;
  while n>0 do
  begin
    read(x);
    if x=now
      then inc(tot)
      else dec(tot);
    if tot=0 then
    begin
      tot:=1;
      now:=x;
    end;
    dec(n);
  end;
  writeln(now);
end.


你可能感兴趣的:(bzoj 2456: mode)