Skip to content

Commit 4d7d4fa

Browse files
committed
feat: update solutions to lc/lcof/lcci problem: Majority Element
1 parent b56d67f commit 4d7d4fa

File tree

22 files changed

+573
-100
lines changed

22 files changed

+573
-100
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050

5151
### 数组
5252

53+
- [多数元素](./solution/0100-0199/0169.Majority%20Element/README.md)
5354
- [删除排序数组中的重复项](./solution/0000-0099/0026.Remove%20Duplicates%20from%20Sorted%20Array/README.md)
5455
- [删除排序数组中的重复项 II](./solution/0000-0099/0080.Remove%20Duplicates%20from%20Sorted%20Array%20II/README.md)
5556
- [移除元素](./solution/0000-0099/0027.Remove%20Element/README.md)

README_EN.md

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ Complete solutions to [LeetCode](https://leetcode-cn.com/problemset/all/), [LCOF
5050

5151
### Arrays
5252

53+
- [Majority Element](./solution/0100-0199/0169.Majority%20Element/README_EN.md)
5354
- [Remove Duplicates from Sorted Array](./solution/0000-0099/0026.Remove%20Duplicates%20from%20Sorted%20Array/README_EN.md)
5455
- [Remove Duplicates from Sorted Array II](./solution/0000-0099/0080.Remove%20Duplicates%20from%20Sorted%20Array%20II/README_EN.md)
5556
- [Remove Element](./solution/0000-0099/0027.Remove%20Element/README_EN.md)

lcci/17.10.Find Majority Element/README.md

+75-13
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
<!-- 这里可写通用的实现逻辑 -->
3737

38-
摩尔投票法
38+
摩尔投票法。时间复杂度 O(n),空间复杂度 O(1)。
3939

4040
<!-- tabs:start -->
4141

@@ -44,15 +44,37 @@
4444
<!-- 这里可写当前语言的特殊实现逻辑 -->
4545

4646
```python
47-
47+
class Solution:
48+
def majorityElement(self, nums: List[int]) -> int:
49+
cnt = major = 0
50+
for num in nums:
51+
if cnt == 0:
52+
major = num
53+
cnt = 1
54+
else:
55+
cnt += (1 if major == num else -1)
56+
return major
4857
```
4958

5059
### **Java**
5160

5261
<!-- 这里可写当前语言的特殊实现逻辑 -->
5362

5463
```java
55-
64+
class Solution {
65+
public int majorityElement(int[] nums) {
66+
int cnt = 0, major = 0;
67+
for (int num : nums) {
68+
if (cnt == 0) {
69+
major = num;
70+
cnt = 1;
71+
} else {
72+
cnt += (major == num ? 1 : -1);
73+
}
74+
}
75+
return major;
76+
}
77+
}
5678
```
5779

5880
### **JavaScript**
@@ -63,23 +85,63 @@
6385
* @return {number}
6486
*/
6587
var majorityElement = function(nums) {
66-
let candidate = 0, count = 0;
67-
for (let num of nums) {
68-
if (count == 0) candidate = num;
69-
if (candidate == num) {
70-
count++;
88+
let cnt = 0;
89+
let major = 0;
90+
for (const num of nums) {
91+
if (cnt == 0) {
92+
major = num;
93+
cnt = 1;
7194
} else {
72-
count--;
95+
cnt += (major == num ? 1 : -1);
7396
}
7497
}
75-
let n = 0;
76-
for (let num of nums) {
77-
if (candidate == num) n++;
98+
return major;
99+
};
100+
```
101+
102+
### **C++**
103+
104+
```cpp
105+
class Solution {
106+
public:
107+
int majorityElement(vector<int>& nums) {
108+
int cnt = 0, major = 0;
109+
for (int num : nums) {
110+
if (cnt == 0) {
111+
major = num;
112+
cnt = 1;
113+
} else {
114+
cnt += (major == num ? 1 : -1);
115+
}
116+
}
117+
return major;
78118
}
79-
return n > (nums.length / 2) ? candidate : -1;
80119
};
81120
```
82121
122+
### **C#**
123+
124+
```cs
125+
public class Solution {
126+
public int MajorityElement(int[] nums) {
127+
int cnt = 0, major = 0;
128+
foreach (int num in nums)
129+
{
130+
if (cnt == 0)
131+
{
132+
major = num;
133+
cnt = 1;
134+
}
135+
else
136+
{
137+
cnt += (major == num ? 1 : -1);
138+
}
139+
}
140+
return major;
141+
}
142+
}
143+
```
144+
83145
### **...**
84146

85147
```

lcci/17.10.Find Majority Element/README_EN.md

+74-12
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,35 @@ Boyer–Moore majority vote algorithm
4545
### **Python3**
4646

4747
```python
48-
48+
class Solution:
49+
def majorityElement(self, nums: List[int]) -> int:
50+
cnt = major = 0
51+
for num in nums:
52+
if cnt == 0:
53+
major = num
54+
cnt = 1
55+
else:
56+
cnt += (1 if major == num else -1)
57+
return major
4958
```
5059

5160
### **Java**
5261

5362
```java
54-
63+
class Solution {
64+
public int majorityElement(int[] nums) {
65+
int cnt = 0, major = 0;
66+
for (int num : nums) {
67+
if (cnt == 0) {
68+
major = num;
69+
cnt = 1;
70+
} else {
71+
cnt += (major == num ? 1 : -1);
72+
}
73+
}
74+
return major;
75+
}
76+
}
5577
```
5678

5779
### **JavaScript**
@@ -62,23 +84,63 @@ Boyer–Moore majority vote algorithm
6284
* @return {number}
6385
*/
6486
var majorityElement = function(nums) {
65-
let candidate = 0, count = 0;
66-
for (let num of nums) {
67-
if (count == 0) candidate = num;
68-
if (candidate == num) {
69-
count++;
87+
let cnt = 0;
88+
let major = 0;
89+
for (const num of nums) {
90+
if (cnt == 0) {
91+
major = num;
92+
cnt = 1;
7093
} else {
71-
count--;
94+
cnt += (major == num ? 1 : -1);
7295
}
7396
}
74-
let n = 0;
75-
for (let num of nums) {
76-
if (candidate == num) n++;
97+
return major;
98+
};
99+
```
100+
101+
### **C++**
102+
103+
```cpp
104+
class Solution {
105+
public:
106+
int majorityElement(vector<int>& nums) {
107+
int cnt = 0, major = 0;
108+
for (int num : nums) {
109+
if (cnt == 0) {
110+
major = num;
111+
cnt = 1;
112+
} else {
113+
cnt += (major == num ? 1 : -1);
114+
}
115+
}
116+
return major;
77117
}
78-
return n > (nums.length / 2) ? candidate : -1;
79118
};
80119
```
81120
121+
### **C#**
122+
123+
```cs
124+
public class Solution {
125+
public int MajorityElement(int[] nums) {
126+
int cnt = 0, major = 0;
127+
foreach (int num in nums)
128+
{
129+
if (cnt == 0)
130+
{
131+
major = num;
132+
cnt = 1;
133+
}
134+
else
135+
{
136+
cnt += (major == num ? 1 : -1);
137+
}
138+
}
139+
return major;
140+
}
141+
}
142+
```
143+
82144
### **...**
83145

84146
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
int majorityElement(vector<int>& nums) {
4+
int cnt = 0, major = 0;
5+
for (int num : nums) {
6+
if (cnt == 0) {
7+
major = num;
8+
cnt = 1;
9+
} else {
10+
cnt += (major == num ? 1 : -1);
11+
}
12+
}
13+
return major;
14+
}
15+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
public class Solution {
2+
public int MajorityElement(int[] nums) {
3+
int cnt = 0, major = 0;
4+
foreach (int num in nums)
5+
{
6+
if (cnt == 0)
7+
{
8+
major = num;
9+
cnt = 1;
10+
}
11+
else
12+
{
13+
cnt += (major == num ? 1 : -1);
14+
}
15+
}
16+
return major;
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
func majorityElement(nums []int) int {
2+
var cnt, major int
3+
for _, num := range nums {
4+
if cnt == 0 {
5+
major = num
6+
cnt = 1
7+
} else {
8+
if major == num {
9+
cnt++
10+
} else {
11+
cnt--
12+
}
13+
}
14+
}
15+
return major
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public int majorityElement(int[] nums) {
3+
int cnt = 0, major = 0;
4+
for (int num : nums) {
5+
if (cnt == 0) {
6+
major = num;
7+
cnt = 1;
8+
} else {
9+
cnt += (major == num ? 1 : -1);
10+
}
11+
}
12+
return major;
13+
}
14+
}

lcci/17.10.Find Majority Element/Solution.js

+8-11
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,15 @@
33
* @return {number}
44
*/
55
var majorityElement = function(nums) {
6-
let candidate = 0, count = 0;
7-
for (let num of nums) {
8-
if (count == 0) candidate = num;
9-
if (candidate == num) {
10-
count++;
6+
let cnt = 0;
7+
let major = 0;
8+
for (const num of nums) {
9+
if (cnt == 0) {
10+
major = num;
11+
cnt = 1;
1112
} else {
12-
count--;
13+
cnt += (major == num ? 1 : -1);
1314
}
1415
}
15-
let n = 0;
16-
for (let num of nums) {
17-
if (candidate == num) n++;
18-
}
19-
return n > (nums.length / 2) ? candidate : -1;
16+
return major;
2017
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def majorityElement(self, nums: List[int]) -> int:
3+
cnt = major = 0
4+
for num in nums:
5+
if cnt == 0:
6+
major = num
7+
cnt = 1
8+
else:
9+
cnt += (1 if major == num else -1)
10+
return major

0 commit comments

Comments
 (0)