/*Write a program to take an integer array nums of size n, and print the majority element. The majority element is
the element that appears strictly more than ⌊n / 2⌋ times. Print -1 if no such element exists. Note: Majority
Element is not necessarily the element that is present most number of times.*/
#include <stdio.h>
int main() {
int n;
int nums[n];
for (int i
= 0; i
< n
; i
++) scanf("%d", &nums
[i
]);
// Boyer–Moore Voting
int candidate = 0, count = 0;
for (int i = 0; i < n; i++) {
if (count == 0) candidate = nums[i];
count += (nums[i] == candidate) ? 1 : -1;
}
// Verify candidate is actually majority
count = 0;
for (int i = 0; i < n; i++)
if (nums[i] == candidate) count++;
if (count
> n
/ 2) printf("%d", candidate
);
return 0;
}
LypXcml0ZSBhIHByb2dyYW0gdG8gdGFrZSBhbiBpbnRlZ2VyIGFycmF5IG51bXMgb2Ygc2l6ZSBuLCBhbmQgcHJpbnQgdGhlIG1ham9yaXR5IGVsZW1lbnQuIFRoZSBtYWpvcml0eSBlbGVtZW50IGlzCnRoZSBlbGVtZW50IHRoYXQgYXBwZWFycyBzdHJpY3RseSBtb3JlIHRoYW4g4oyKbiAvIDLijIsgdGltZXMuIFByaW50IC0xIGlmIG5vIHN1Y2ggZWxlbWVudCBleGlzdHMuIE5vdGU6IE1ham9yaXR5CkVsZW1lbnQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBlbGVtZW50IHRoYXQgaXMgcHJlc2VudCBtb3N0IG51bWJlciBvZiB0aW1lcy4qLwojaW5jbHVkZSA8c3RkaW8uaD4KCmludCBtYWluKCkgewogICAgaW50IG47CiAgICBzY2FuZigiJWQiLCAmbik7CgogICAgaW50IG51bXNbbl07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgc2NhbmYoIiVkIiwgJm51bXNbaV0pOwoKICAgIC8vIEJveWVy4oCTTW9vcmUgVm90aW5nCiAgICBpbnQgY2FuZGlkYXRlID0gMCwgY291bnQgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBpZiAoY291bnQgPT0gMCkgY2FuZGlkYXRlID0gbnVtc1tpXTsKICAgICAgICBjb3VudCArPSAobnVtc1tpXSA9PSBjYW5kaWRhdGUpID8gMSA6IC0xOwogICAgfQoKICAgIC8vIFZlcmlmeSBjYW5kaWRhdGUgaXMgYWN0dWFsbHkgbWFqb3JpdHkKICAgIGNvdW50ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgIGlmIChudW1zW2ldID09IGNhbmRpZGF0ZSkgY291bnQrKzsKCiAgICBpZiAoY291bnQgPiBuIC8gMikgcHJpbnRmKCIlZCIsIGNhbmRpZGF0ZSk7CiAgICBlbHNlIHByaW50ZigiLTEiKTsKCiAgICByZXR1cm4gMDsKfQo=