File tree Expand file tree Collapse file tree 1 file changed +108
-0
lines changed
problems/169. Majority Element Expand file tree Collapse file tree 1 file changed +108
-0
lines changed Original file line number Diff line number Diff line change
1
+ # 169. Majority Element
2
+
3
+ ## #1 暴力搜索[ TLE]
4
+
5
+ 我们可以遍历每个元素,然后判断该元素是否为` majority element ` 。
6
+
7
+ ``` java
8
+ class Solution {
9
+ public int majorityElement (int [] nums ) {
10
+ int majorityCount = nums. length/ 2 ;
11
+
12
+ for (int num : nums) {
13
+ int count = 0 ;
14
+ for (int elem : nums) {
15
+ if (elem == num) {
16
+ count += 1 ;
17
+ }
18
+ }
19
+
20
+ if (count > majorityCount) {
21
+ return num;
22
+ }
23
+
24
+ }
25
+
26
+ return - 1 ;
27
+ }
28
+ }
29
+ ```
30
+
31
+ - 时间复杂度:$O(n^2)$
32
+ - 空间复杂度:$O(1)$
33
+
34
+ ## #2 HashMap[ AC]
35
+
36
+ 通过一个HashMap数据结构统计每个变量出现的次数,然后变量每个` key-value ` 对,找出` value ` 最大对应的` key ` 。
37
+
38
+ ``` java
39
+ class Solution {
40
+ private Map<Integer , Integer > countNums (int [] nums ) {
41
+ Map<Integer , Integer > counts = new HashMap<Integer , Integer > ();
42
+ for (int num : nums) {
43
+ if (! counts. containsKey(num)) {
44
+ counts. put(num, 1 );
45
+ }
46
+ else {
47
+ counts. put(num, counts. get(num)+ 1 );
48
+ }
49
+ }
50
+ return counts;
51
+ }
52
+
53
+ public int majorityElement (int [] nums ) {
54
+ Map<Integer , Integer > counts = countNums(nums);
55
+
56
+ Map . Entry<Integer , Integer > majorityEntry = null ;
57
+ for (Map . Entry<Integer , Integer > entry : counts. entrySet()) {
58
+ if (majorityEntry == null || entry. getValue() > majorityEntry. getValue()) {
59
+ majorityEntry = entry;
60
+ }
61
+ }
62
+
63
+ return majorityEntry. getKey();
64
+ }
65
+ }
66
+ ```
67
+
68
+ - 时间复杂度:$O(n)$
69
+ - 空间复杂度:$O(n)$
70
+
71
+ ## #3 计数[ AC]
72
+
73
+ 该算法被称为 [ Boyer–Moore majority vote algorithm] ( https://www.wikiwand.com/en/Boyer%E2%80%93Moore_majority_vote_algorithm ) ,用于在线性时间和常量空间内,找出数组中的` majority element ` 。
74
+
75
+ ``` java
76
+ class Solution {
77
+ public int majorityElement (int [] nums ) {
78
+ if (nums == null || nums. length == 0 )
79
+ return - 1 ;
80
+ int count = 1 ;
81
+ int res = nums[0 ];
82
+ for (int i= 1 ; i< nums. length; i++ ){
83
+ if (nums[i] == res)
84
+ count++ ;
85
+ else {
86
+ count-- ;
87
+ if (count == 0 ){
88
+ count = 1 ;
89
+ res = nums[i];
90
+ }
91
+ }
92
+ }
93
+ return res;
94
+ }
95
+ }
96
+ ```
97
+
98
+ ## #4 排序后取中值[ AC]
99
+
100
+ ``` java
101
+ class Solution {
102
+ public int majorityElement (int [] nums ) {
103
+ Arrays . sort(nums);
104
+ return nums[nums. length/ 2 ];
105
+ }
106
+ }
107
+ ```
108
+
You can’t perform that action at this time.
0 commit comments