/// <summary> /// Finds Majority element in the given array using Boyer Moore Voting algorithm. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="a">array</param> /// <returns> /// Majority element /// </returns> public static MajorityElementResult <T> FindMajorityElementByBoyerMooreAlgorithm <T>(T[] a) { MajorityElementResult <T> result = new MajorityElementResult <T>(); if (a.Length > 0) { result.Count = 1; result.MajorityElement = a[0]; } for (int i = 1; i < a.Length; i++) { if (a[i] == null) { continue; } if (a[i].Equals(result.MajorityElement)) { result.Count++; } else { result.Count--; } if (result.Count == 0) { result.MajorityElement = a[i]; result.Count = 1; } } if (result.Count > 0) { result.Count = 0; for (int i = 0; i < a.Length; i++) { if (a[i] == null) { continue; } if (a[i].Equals(result.MajorityElement)) { result.Count++; } } if (result.Count > Math.Floor(a.Length / 2.0)) { return(result); } } return(null); }
/// <summary> /// Finds Majority element in the given array using brute force method. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="a">array</param> /// <returns> /// Majority element /// </returns> public static MajorityElementResult <T> FindMajorityElementByBruteForceMethod <T>(T[] a) { MajorityElementResult <T> result = new MajorityElementResult <T>(); for (int i = 0; i < a.Length; i++) { if (a[i] == null) { continue; } var tempCount = 0; for (int j = i; j < a.Length; j++) { if (a[j] == null) { continue; } if (a[i].Equals(a[j])) { tempCount++; } } if (tempCount > result.Count) { result.Count = tempCount; result.MajorityElement = a[i]; } } if (result.Count > Math.Floor(a.Length / 2.0)) { return(result); } return(null); }