using System;
public class Test
{
public static bool HasMajorityElement(int[] a)
{
int candidate = 0;
int count = 0;
foreach (int i in a)
{
if (count == 0)
{
candidate = i;
count = 1;
}
else
{
count += candidate == i ? 1 : -1;
}
}
count = 0;
foreach (int i in a)
{
if (i == candidate) ++count;
}
return count > a.Length / 2;
}
public static void Main()
{
var a = new int[] { 5, 2, 1, 3, 1 };
System.Console.WriteLine("HasMajorityElement(): {0}", HasMajorityElement(a));
a = new int[] { 5, 1, 3, 1, 1 };
System.Console.WriteLine("HasMajorityElement(): {0}", HasMajorityElement(a));
a = new int[] { 5, 1, 1, 1, 1 };
System.Console.WriteLine("HasMajorityElement(): {0}", HasMajorityElement(a));
a = new int[] { 1, 1, 1, 1, 1 };
System.Console.WriteLine("HasMajorityElement(): {0}", HasMajorityElement(a));
a = new int[] { 0, 4, 3, 2, 1 };
System.Console.WriteLine("HasMajorityElement(): {0}", HasMajorityElement(a));
a = new int[] { 0, 0, 0, 2, 1 };
System.Console.WriteLine("HasMajorityElement(): {0}", HasMajorityElement(a));
a = new int[] { 1, 5, 5, 5, 1 };
System.Console.WriteLine("HasMajorityElement(): {0}", HasMajorityElement(a));
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyBib29sIEhhc01ham9yaXR5RWxlbWVudChpbnRbXSBhKQoJewoJCWludCBjYW5kaWRhdGUgPSAwOwoJCWludCBjb3VudCA9IDA7CgkJZm9yZWFjaCAoaW50IGkgaW4gYSkKCQl7CgkJCWlmIChjb3VudCA9PSAwKQoJCQl7IAoJCQkJY2FuZGlkYXRlID0gaTsKCQkJCWNvdW50ID0gMTsKCQkJfQoJCQllbHNlIAoJCQl7CgkJCQljb3VudCArPSBjYW5kaWRhdGUgPT0gaSA/IDEgOiAtMTsKCQkJfQoJCX0KCQljb3VudCA9IDA7CgkJZm9yZWFjaCAoaW50IGkgaW4gYSkKCQl7CgkJCWlmIChpID09IGNhbmRpZGF0ZSkgKytjb3VudDsKCQl9CgkJcmV0dXJuIGNvdW50ID4gYS5MZW5ndGggLyAyOwoJfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQl2YXIgYSA9IG5ldyBpbnRbXSB7IDUsIDIsIDEsIDMsIDEgfTsKCQlTeXN0ZW0uQ29uc29sZS5Xcml0ZUxpbmUoIkhhc01ham9yaXR5RWxlbWVudCgpOiB7MH0iLCBIYXNNYWpvcml0eUVsZW1lbnQoYSkpOwoJCWEgPSBuZXcgaW50W10geyA1LCAxLCAzLCAxLCAxIH07CgkJU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lKCJIYXNNYWpvcml0eUVsZW1lbnQoKTogezB9IiwgSGFzTWFqb3JpdHlFbGVtZW50KGEpKTsKCQlhID0gbmV3IGludFtdIHsgNSwgMSwgMSwgMSwgMSB9OwoJCVN5c3RlbS5Db25zb2xlLldyaXRlTGluZSgiSGFzTWFqb3JpdHlFbGVtZW50KCk6IHswfSIsIEhhc01ham9yaXR5RWxlbWVudChhKSk7CgkJYSA9IG5ldyBpbnRbXSB7IDEsIDEsIDEsIDEsIDEgfTsKCQlTeXN0ZW0uQ29uc29sZS5Xcml0ZUxpbmUoIkhhc01ham9yaXR5RWxlbWVudCgpOiB7MH0iLCBIYXNNYWpvcml0eUVsZW1lbnQoYSkpOwoJCWEgPSBuZXcgaW50W10geyAwLCA0LCAzLCAyLCAxIH07CgkJU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lKCJIYXNNYWpvcml0eUVsZW1lbnQoKTogezB9IiwgSGFzTWFqb3JpdHlFbGVtZW50KGEpKTsKCQlhID0gbmV3IGludFtdIHsgMCwgMCwgMCwgMiwgMSB9OwoJCVN5c3RlbS5Db25zb2xlLldyaXRlTGluZSgiSGFzTWFqb3JpdHlFbGVtZW50KCk6IHswfSIsIEhhc01ham9yaXR5RWxlbWVudChhKSk7CgkJYSA9IG5ldyBpbnRbXSB7IDEsIDUsIDUsIDUsIDEgfTsKCQlTeXN0ZW0uQ29uc29sZS5Xcml0ZUxpbmUoIkhhc01ham9yaXR5RWxlbWVudCgpOiB7MH0iLCBIYXNNYWpvcml0eUVsZW1lbnQoYSkpOwoJfQp9