package com.interview.algorithms.array; import com.interview.utils.ConsoleReader; import java.util.ArrayList; import java.util.List; /** * Given a list, there is one element whose amount is greater or equal to the half length of the list, * find this element without applying additional storage space. * * @author zouzhile (zouzhile@gmail.com) */ public class C4_9_MajorityElementFinder { public static int find(Integer[] a) { int x = 0, cnt = 0; for (int i = 0; i < a.length; i++) { if (cnt == 0) { x = a[i]; cnt++; } else if (a[i] == x) cnt++; else cnt--; } return x; } public static Integer find(List<Integer> array) { int index = 0; while (index < array.size() - 1) { if (array.get(index) != array.get(index + 1)) { array.remove(index); array.remove(index); if (index > 0) { index--; } } else { index++; } } return array.get(0); } /** * @param args */ public static void main(String[] args) { System.out.println("The Majority Element Finder"); System.out.println("========================================================================"); ConsoleReader reader = new ConsoleReader(); System.out.print("Please input the array elements: "); int[] inputs = reader.readIntItems(); List<Integer> array = new ArrayList<Integer>(); ; for (int input : inputs) { array.add(Integer.valueOf(input)); } Integer result = C4_9_MajorityElementFinder.find(array); System.out.println("The majority element is " + result); } }