Skip to content

Commit 4d7d4fa

Browse files
committedJun 12, 2021
feat: update solutions to lc/lcof/lcci problem: Majority Element
·
v0.3.0v0.1.5
1 parent b56d67f commit 4d7d4fa

File tree

22 files changed

+573
-100
lines changed

22 files changed

+573
-100
lines changed
 

‎README.md

Lines changed: 1 addition & 0 deletions
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

Lines changed: 1 addition & 0 deletions
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

Lines changed: 75 additions & 13 deletions
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

Lines changed: 74 additions & 12 deletions
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
```
Lines changed: 15 additions & 0 deletions
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+
};
Lines changed: 18 additions & 0 deletions
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+
}
Lines changed: 16 additions & 0 deletions
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+
}
Lines changed: 14 additions & 0 deletions
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

Lines changed: 8 additions & 11 deletions
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
};
Lines changed: 10 additions & 0 deletions
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

‎lcof/面试题39. 数组中出现次数超过一半的数字/README.md

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,31 +25,35 @@
2525

2626
### **Python3**
2727

28+
<!-- 这里可写当前语言的特殊实现逻辑 -->
29+
2830
```python
2931
class Solution:
3032
def majorityElement(self, nums: List[int]) -> int:
3133
cnt = major = 0
3234
for num in nums:
3335
if cnt == 0:
3436
major = num
35-
cnt += 1
37+
cnt = 1
3638
else:
3739
cnt += (1 if major == num else -1)
3840
return major
3941
```
4042

4143
### **Java**
4244

45+
<!-- 这里可写当前语言的特殊实现逻辑 -->
46+
4347
```java
4448
class Solution {
4549
public int majorityElement(int[] nums) {
46-
int major = 0, cnt = 0;
50+
int cnt = 0, major = 0;
4751
for (int num : nums) {
4852
if (cnt == 0) {
4953
major = num;
50-
++cnt;
54+
cnt = 1;
5155
} else {
52-
cnt += (num == major ? 1 : -1);
56+
cnt += (major == num ? 1 : -1);
5357
}
5458
}
5559
return major;
@@ -64,20 +68,18 @@ class Solution {
6468
* @param {number[]} nums
6569
* @return {number}
6670
*/
67-
var majorityElement = function (nums) {
68-
let cnt = 0;
69-
let mode = -1;
70-
for (let num of nums) {
71-
if (!cnt) {
72-
mode = num;
73-
cnt++;
74-
} else {
75-
if (mode === num) cnt++;
76-
else cnt--;
71+
var majorityElement = function(nums) {
72+
let cnt = 0;
73+
let major = 0;
74+
for (const num of nums) {
75+
if (cnt == 0) {
76+
major = num;
77+
cnt = 1;
78+
} else {
79+
cnt += (major == num ? 1 : -1);
80+
}
7781
}
78-
}
79-
return mode;
80-
// return nums.sort((a,b)=>a-b)[~~(nums.length/2)]
82+
return major;
8183
};
8284
```
8385

@@ -97,6 +99,29 @@ public:
9799
};
98100
```
99101
102+
### **C#**
103+
104+
```cs
105+
public class Solution {
106+
public int MajorityElement(int[] nums) {
107+
int cnt = 0, major = 0;
108+
foreach (int num in nums)
109+
{
110+
if (cnt == 0)
111+
{
112+
major = num;
113+
cnt = 1;
114+
}
115+
else
116+
{
117+
cnt += (major == num ? 1 : -1);
118+
}
119+
}
120+
return major;
121+
}
122+
}
123+
```
124+
100125
### **...**
101126

102127
```
Lines changed: 18 additions & 0 deletions
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+
}
Lines changed: 16 additions & 0 deletions
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+
}

‎lcof/面试题39. 数组中出现次数超过一半的数字/Solution.js

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,16 @@
22
* @param {number[]} nums
33
* @return {number}
44
*/
5-
var majorityElement = function (nums) {
5+
var majorityElement = function(nums) {
66
let cnt = 0;
7-
let mode = -1;
8-
for (let num of nums) {
9-
if (!cnt) {
10-
mode = num;
11-
cnt++;
12-
} else {
13-
if (mode === num) cnt++;
14-
else cnt--;
15-
}
7+
let major = 0;
8+
for (const num of nums) {
9+
if (cnt == 0) {
10+
major = num;
11+
cnt = 1;
12+
} else {
13+
cnt += (major == num ? 1 : -1);
14+
}
1615
}
17-
return mode;
18-
// return nums.sort((a,b)=>a-b)[~~(nums.length/2)]
19-
};
16+
return major;
17+
};

‎solution/0100-0199/0169.Majority Element/README.md

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,111 @@
3838

3939
<!-- 这里可写通用的实现逻辑 -->
4040

41+
摩尔投票法。时间复杂度 O(n),空间复杂度 O(1)。
42+
4143
<!-- tabs:start -->
4244

4345
### **Python3**
4446

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

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

5162
### **Java**
5263

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

5566
```java
67+
class Solution {
68+
public int majorityElement(int[] nums) {
69+
int cnt = 0, major = 0;
70+
for (int num : nums) {
71+
if (cnt == 0) {
72+
major = num;
73+
cnt = 1;
74+
} else {
75+
cnt += (major == num ? 1 : -1);
76+
}
77+
}
78+
return major;
79+
}
80+
}
81+
```
82+
83+
### **JavaScript**
84+
85+
```js
86+
/**
87+
* @param {number[]} nums
88+
* @return {number}
89+
*/
90+
var majorityElement = function(nums) {
91+
let cnt = 0;
92+
let major = 0;
93+
for (const num of nums) {
94+
if (cnt == 0) {
95+
major = num;
96+
cnt = 1;
97+
} else {
98+
cnt += (major == num ? 1 : -1);
99+
}
100+
}
101+
return major;
102+
};
103+
```
104+
105+
### **C++**
106+
107+
```cpp
108+
class Solution {
109+
public:
110+
int majorityElement(vector<int>& nums) {
111+
int cnt = 0, major = 0;
112+
for (int num : nums) {
113+
if (cnt == 0) {
114+
major = num;
115+
cnt = 1;
116+
} else {
117+
cnt += (major == num ? 1 : -1);
118+
}
119+
}
120+
return major;
121+
}
122+
};
123+
```
56124
125+
### **C#**
126+
127+
```cs
128+
public class Solution {
129+
public int MajorityElement(int[] nums) {
130+
int cnt = 0, major = 0;
131+
foreach (int num in nums)
132+
{
133+
if (cnt == 0)
134+
{
135+
major = num;
136+
cnt = 1;
137+
}
138+
else
139+
{
140+
cnt += (major == num ? 1 : -1);
141+
}
142+
}
143+
return major;
144+
}
145+
}
57146
```
58147

59148
### **...**

‎solution/0100-0199/0169.Majority Element/README_EN.md

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,100 @@
3535
### **Python3**
3636

3737
```python
38-
38+
class Solution:
39+
def majorityElement(self, nums: List[int]) -> int:
40+
cnt = major = 0
41+
for num in nums:
42+
if cnt == 0:
43+
major = num
44+
cnt = 1
45+
else:
46+
cnt += (1 if major == num else -1)
47+
return major
3948
```
4049

4150
### **Java**
4251

4352
```java
53+
class Solution {
54+
public int majorityElement(int[] nums) {
55+
int cnt = 0, major = 0;
56+
for (int num : nums) {
57+
if (cnt == 0) {
58+
major = num;
59+
cnt = 1;
60+
} else {
61+
cnt += (major == num ? 1 : -1);
62+
}
63+
}
64+
return major;
65+
}
66+
}
67+
```
68+
69+
### **JavaScript**
70+
71+
```js
72+
/**
73+
* @param {number[]} nums
74+
* @return {number}
75+
*/
76+
var majorityElement = function(nums) {
77+
let cnt = 0;
78+
let major = 0;
79+
for (const num of nums) {
80+
if (cnt == 0) {
81+
major = num;
82+
cnt = 1;
83+
} else {
84+
cnt += (major == num ? 1 : -1);
85+
}
86+
}
87+
return major;
88+
};
89+
```
90+
91+
### **C++**
92+
93+
```cpp
94+
class Solution {
95+
public:
96+
int majorityElement(vector<int>& nums) {
97+
int cnt = 0, major = 0;
98+
for (int num : nums) {
99+
if (cnt == 0) {
100+
major = num;
101+
cnt = 1;
102+
} else {
103+
cnt += (major == num ? 1 : -1);
104+
}
105+
}
106+
return major;
107+
}
108+
};
109+
```
44110
111+
### **C#**
112+
113+
```cs
114+
public class Solution {
115+
public int MajorityElement(int[] nums) {
116+
int cnt = 0, major = 0;
117+
foreach (int num in nums)
118+
{
119+
if (cnt == 0)
120+
{
121+
major = num;
122+
cnt = 1;
123+
}
124+
else
125+
{
126+
cnt += (major == num ? 1 : -1);
127+
}
128+
}
129+
return major;
130+
}
131+
}
45132
```
46133

47134
### **...**
Lines changed: 15 additions & 0 deletions
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+
};
Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,18 @@
11
public class Solution {
22
public int MajorityElement(int[] nums) {
3-
return Sort(nums, 0, nums.Length - 1);
4-
}
5-
6-
private int Sort(int[] nums, int left, int right)
7-
{
8-
if (left == right) return nums[left];
9-
var targetIndex = nums.Length / 2;
10-
var mid = nums[(left + right) / 2];
11-
var i = left;
12-
var j = right;
13-
while (i <= j)
3+
int cnt = 0, major = 0;
4+
foreach (int num in nums)
145
{
15-
while (nums[i] < mid) ++i;
16-
while (nums[j] > mid) --j;
17-
if (i <= j)
6+
if (cnt == 0)
7+
{
8+
major = num;
9+
cnt = 1;
10+
}
11+
else
1812
{
19-
var temp = nums[i];
20-
nums[i] = nums[j];
21-
nums[j] = temp;
22-
++i;
23-
--j;
13+
cnt += (major == num ? 1 : -1);
2414
}
2515
}
26-
if (targetIndex <= j) return Sort(nums, left, j);
27-
if (targetIndex >= i) return Sort(nums, i, right);
28-
return mid;
16+
return major;
2917
}
3018
}
Lines changed: 16 additions & 0 deletions
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+
}
Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
class Solution {
22
public int majorityElement(int[] nums) {
3-
int count=1;
4-
int res=nums[0];
5-
for(int i=1; i<nums.length; i++){
6-
if(res==nums[i])
7-
count++;
8-
else{
9-
count--;
10-
if(count==0)
11-
res=nums[i+1];
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);
1210
}
1311
}
14-
return res;
12+
return major;
1513
}
1614
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var majorityElement = function(nums) {
6+
let cnt = 0;
7+
let major = 0;
8+
for (const num of nums) {
9+
if (cnt == 0) {
10+
major = num;
11+
cnt = 1;
12+
} else {
13+
cnt += (major == num ? 1 : -1);
14+
}
15+
}
16+
return major;
17+
};
Lines changed: 10 additions & 0 deletions
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)
Please sign in to comment.