8000 add 169 solution · zykjcom/leetcode@6d1c07f · GitHub
[go: up one dir, main page]

Skip t 8000 o content

Commit 6d1c07f

Browse files
committed
add 169 solution
1 parent ed4d852 commit 6d1c07f

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
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+

0 commit comments

Comments
 (0)
0