Skip to content

Commit 6e4ee0e

Browse files
committed
feat: add solutions to lc problem: No.0169
No.0169.Majority Element
1 parent 24fd3c4 commit 6e4ee0e

File tree

11 files changed

+253
-183
lines changed

11 files changed

+253
-183
lines changed

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

+95-75
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,14 @@
4646

4747
摩尔投票法的基本步骤如下:
4848

49-
初始化元素 $m$,并给计数器 $cnt$ 赋初值 $cnt=0$。对于输入列表中每一个元素 $x$:
49+
初始化元素 $m$,并初始化计数器 $cnt=0$。接下来,对于输入列表中每一个元素 $x$:
5050

51-
1. 若 $cnt=0$,那么 $m=x$ and $cnt=1$;
52-
1. 否则若 $m=x$,那么 $cnt=cnt+1$;
53-
1. 否则 $cnt=cnt-1$。
51+
1. 如果 $cnt=0$,那么 $m=x$ 并且 $cnt=1$;
52+
1. 否则,如果 $m=x$,那么 $cnt = cnt + 1$,否则 $cnt = cnt - 1$。
5453

55-
一般而言,摩尔投票法需要对输入的列表进行**两次遍历**。在第一次遍历中,我们生成候选值 $m$,如果存在多数,那么该候选值就是多数值。在第二次遍历中,只需要简单地计算候选值的频率,以确认是否是多数值。由于本题已经明确说明存在多数值,所以第一次遍历结束后,直接返回 m 即可,无需二次遍历确认是否是多数值。
54+
一般而言,摩尔投票法需要对输入的列表进行**两次遍历**。在第一次遍历中,我们生成候选值 $m$,如果存在多数,那么该候选值就是多数值。在第二次遍历中,只需要简单地计算候选值的频率,以确认是否是多数值。由于本题已经明确说明存在多数值,所以第一次遍历结束后,直接返回 $m$ 即可,无需二次遍历确认是否是多数值。
5655

57-
时间复杂度 $O(n)$,空间复杂度 $O(1)$。
56+
时间复杂度 $O(n)$,其中 $n$ 是数组 $nums$ 的长度。空间复杂度 $O(1)$。
5857

5958
<!-- tabs:start -->
6059

@@ -66,11 +65,11 @@
6665
class Solution:
6766
def majorityElement(self, nums: List[int]) -> int:
6867
cnt = m = 0
69-
for v in nums:
68+
for x in nums:
7069
if cnt == 0:
71-
m, cnt = v, 1
70+
m, cnt = x, 1
7271
else:
73-
cnt += 1 if m == v else -1
72+
cnt += 1 if m == x else -1
7473
return m
7574
```
7675

@@ -82,93 +81,49 @@ class Solution:
8281
class Solution {
8382
public int majorityElement(int[] nums) {
8483
int cnt = 0, m = 0;
85-
for (int v : nums) {
84+
for (int x : nums) {
8685
if (cnt == 0) {
87-
m = v;
86+
m = x;
8887
cnt = 1;
8988
} else {
90-
cnt += (m == v ? 1 : -1);
89+
cnt += m == x ? 1 : -1;
9190
}
9291
}
9392
return m;
9493
}
9594
}
9695
```
9796

98-
### **JavaScript**
99-
100-
```js
101-
/**
102-
* @param {number[]} nums
103-
* @return {number}
104-
*/
105-
var majorityElement = function (nums) {
106-
let cnt = 0,
107-
m = 0;
108-
for (const v of nums) {
109-
if (cnt == 0) {
110-
m = v;
111-
cnt = 1;
112-
} else {
113-
cnt += m == v ? 1 : -1;
114-
}
115-
}
116-
return m;
117-
};
118-
```
119-
12097
### **C++**
12198

12299
```cpp
123100
class Solution {
124101
public:
125102
int majorityElement(vector<int>& nums) {
126103
int cnt = 0, m = 0;
127-
for (int& v : nums) {
104+
for (int& x : nums) {
128105
if (cnt == 0) {
129-
m = v;
106+
m = x;
130107
cnt = 1;
131-
} else
132-
cnt += (m == v ? 1 : -1);
133-
}
134-
return m;
135-
}
136-
};
137-
```
138-
139-
### **C#**
140-
141-
```cs
142-
public class Solution {
143-
public int MajorityElement(int[] nums) {
144-
int cnt = 0, m = 0;
145-
foreach (int v in nums)
146-
{
147-
if (cnt == 0)
148-
{
149-
m = v;
150-
cnt = 1;
151-
}
152-
else
153-
{
154-
cnt += m == v ? 1 : -1;
108+
} else {
109+
cnt += m == x ? 1 : -1;
155110
}
156111
}
157112
return m;
158113
}
159-
}
114+
};
160115
```
161116
162117
### **Go**
163118
164119
```go
165120
func majorityElement(nums []int) int {
166-
cnt, m := 0, 0
167-
for _, v := range nums {
121+
var cnt, m int
122+
for _, x := range nums {
168123
if cnt == 0 {
169-
m, cnt = v, 1
124+
m, cnt = x, 1
170125
} else {
171-
if m == v {
126+
if m == x {
172127
cnt++
173128
} else {
174129
cnt--
@@ -179,19 +134,78 @@ func majorityElement(nums []int) int {
179134
}
180135
```
181136

137+
### **TypeScript**
138+
139+
```ts
140+
function majorityElement(nums: number[]): number {
141+
let cnt: number = 0;
142+
let m: number = 0;
143+
for (const x of nums) {
144+
if (cnt === 0) {
145+
m = x;
146+
cnt = 1;
147+
} else {
148+
cnt += m === x ? 1 : -1;
149+
}
150+
}
151+
return m;
152+
}
153+
```
154+
155+
### **JavaScript**
156+
157+
```js
158+
/**
159+
* @param {number[]} nums
160+
* @return {number}
161+
*/
162+
var majorityElement = function (nums) {
163+
let cnt = 0;
164+
let m = 0;
165+
for (const x of nums) {
166+
if (cnt === 0) {
167+
m = x;
168+
cnt = 1;
169+
} else {
170+
cnt += m === x ? 1 : -1;
171+
}
172+
}
173+
return m;
174+
};
175+
```
176+
177+
### **C#**
178+
179+
```cs
180+
public class Solution {
181+
public int MajorityElement(int[] nums) {
182+
int cnt = 0, m = 0;
183+
foreach (int x in nums) {
184+
if (cnt == 0) {
185+
m = x;
186+
cnt = 1;
187+
} else {
188+
cnt += m == x ? 1 : -1;
189+
}
190+
}
191+
return m;
192+
}
193+
}
194+
```
195+
182196
### **Rust**
183197

184198
```rust
185199
impl Solution {
186200
pub fn majority_element(nums: Vec<i32>) -> i32 {
187201
let mut m = 0;
188202
let mut cnt = 0;
189-
for &v in nums.iter() {
203+
for &x in nums.iter() {
190204
if cnt == 0 {
191-
m = v;
205+
m = x;
192206
cnt = 1;
193207
} else {
194-
cnt += if m == v { 1 } else { -1 };
208+
cnt += if m == x { 1 } else { -1 };
195209
}
196210
}
197211
m
@@ -203,19 +217,25 @@ impl Solution {
203217

204218
```php
205219
class Solution {
220+
206221
/**
207222
* @param Integer[] $nums
208223
* @return Integer
209224
*/
210225
function majorityElement($nums) {
211-
$major = 0;
212-
$count = 0;
213-
for ($i = 0; $i < count($nums); $i++) {
214-
if ($count == 0) $major = $nums[$i];
215-
if ($major == $nums[$i]) $count++;
216-
else $count--;
226+
$m = 0;
227+
$cnt = 0;
228+
foreach ($nums as $x) {
229+
if ($cnt == 0) {
230+
$m = $x;
231+
}
232+
if ($m == $x) {
233+
$cnt++;
234+
} else {
235+
$cnt--;
236+
}
217237
}
218-
return $major;
238+
return $m;
219239
}
220240
}
221241
```

0 commit comments

Comments
 (0)