11package easy ;
22
3+ import java .util .Arrays ;
34import java .util .HashMap ;
45import java .util .Map ;
56
67public class MajorityElement169 {
78
8- public static int majorityElement (int [] nums ) {
9+ // O(N) Time | O(N) Space
10+ public static int majorityElement1 (int [] nums ) {
911
1012 HashMap <Integer , Integer > map = new HashMap <>();
1113
@@ -27,12 +29,54 @@ public static int majorityElement(int[] nums) {
2729 return ans ;
2830 }
2931
32+ // O(NlogN) Time | O(1) Space
33+ public static int majorityElement2 (int [] nums ) {
34+ Arrays .sort (nums );
35+ return nums [nums .length / 2 ];
36+ }
37+
38+ // optimizing using Boyer-Moore Voting Algorithm
39+ // O(N) Time | O(1) Space
40+ public static int majorityElement (int [] nums ) {
41+
42+ int candidate = nums [0 ];
43+ int votes = 1 ;
44+
45+ for (int i = 1 ; i < nums .length ; i ++) {
46+ int curr = nums [i ];
47+
48+ if (curr == candidate ) {
49+ votes ++;
50+ } else {
51+ votes --;
52+ }
53+
54+ if (votes == 0 ) {
55+ candidate = curr ;
56+ votes = 1 ;
57+ }
58+ }
59+
60+ // verifying candidate votes count
61+ int count = 0 ;
62+ for (int n : nums ) {
63+ if (n == candidate )
64+ count ++;
65+ }
66+
67+ if (count > nums .length / 2 ) {
68+ return candidate ;
69+ } else {
70+ return -1 ;
71+ }
72+ }
73+
3074 public static void main (String [] args ) {
3175 int [] nums = { 2 , 2 , 1 , 1 , 1 , 2 , 2 };
3276 System .out .println (majorityElement (nums ));
3377
3478 System .out .println (majorityElement (new int [] { 3 , 2 , 3 }));
35-
79+ //
3680 System .out .println (majorityElement (new int [] { 2 , 2 }));
3781
3882 }
0 commit comments