Skip to content

Commit 516f9c4

Browse files
committed
LC#300, optimized, finds majority element in array, O(N) time, O(1) Space, Moore's voting algo
1 parent e4c101b commit 516f9c4

File tree

1 file changed

+46
-2
lines changed

1 file changed

+46
-2
lines changed

Leetcode/easy/MajorityElement169.java

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package easy;
22

3+
import java.util.Arrays;
34
import java.util.HashMap;
45
import java.util.Map;
56

67
public 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

Comments
 (0)