46
46
47
47
摩尔投票法的基本步骤如下:
48
48
49
- 初始化元素 $m$,并给计数器 $cnt$ 赋初值 $cnt =0$。对于输入列表中每一个元素 $x$:
49
+ 初始化元素 $m$,并初始化计数器 $cnt=0$。接下来, 对于输入列表中每一个元素 $x$:
50
50
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$。
54
53
55
- 一般而言,摩尔投票法需要对输入的列表进行** 两次遍历** 。在第一次遍历中,我们生成候选值 $m$,如果存在多数,那么该候选值就是多数值。在第二次遍历中,只需要简单地计算候选值的频率,以确认是否是多数值。由于本题已经明确说明存在多数值,所以第一次遍历结束后,直接返回 m 即可,无需二次遍历确认是否是多数值。
54
+ 一般而言,摩尔投票法需要对输入的列表进行** 两次遍历** 。在第一次遍历中,我们生成候选值 $m$,如果存在多数,那么该候选值就是多数值。在第二次遍历中,只需要简单地计算候选值的频率,以确认是否是多数值。由于本题已经明确说明存在多数值,所以第一次遍历结束后,直接返回 $m$ 即可,无需二次遍历确认是否是多数值。
56
55
57
- 时间复杂度 $O(n)$,空间复杂度 $O(1)$。
56
+ 时间复杂度 $O(n)$,其中 $n$ 是数组 $nums$ 的长度。 空间复杂度 $O(1)$。
58
57
59
58
<!-- tabs:start -->
60
59
66
65
class Solution :
67
66
def majorityElement (self , nums : List[int ]) -> int :
68
67
cnt = m = 0
69
- for v in nums:
68
+ for x in nums:
70
69
if cnt == 0 :
71
- m, cnt = v , 1
70
+ m, cnt = x , 1
72
71
else :
73
- cnt += 1 if m == v else - 1
72
+ cnt += 1 if m == x else - 1
74
73
return m
75
74
```
76
75
@@ -82,93 +81,49 @@ class Solution:
82
81
class Solution {
83
82
public int majorityElement (int [] nums ) {
84
83
int cnt = 0 , m = 0 ;
85
- for (int v : nums) {
84
+ for (int x : nums) {
86
85
if (cnt == 0 ) {
87
- m = v ;
86
+ m = x ;
88
87
cnt = 1 ;
89
88
} else {
90
- cnt += ( m == v ? 1 : - 1 ) ;
89
+ cnt += m == x ? 1 : - 1 ;
91
90
}
92
91
}
93
92
return m;
94
93
}
95
94
}
96
95
```
97
96
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
-
120
97
### ** C++**
121
98
122
99
``` cpp
123
100
class Solution {
124
101
public:
125
102
int majorityElement(vector<int >& nums) {
126
103
int cnt = 0, m = 0;
127
- for (int& v : nums) {
104
+ for (int& x : nums) {
128
105
if (cnt == 0) {
129
- m = v ;
106
+ m = x ;
130
107
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;
155
110
}
156
111
}
157
112
return m;
158
113
}
159
- }
114
+ };
160
115
```
161
116
162
117
### **Go**
163
118
164
119
```go
165
120
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 {
168
123
if cnt == 0 {
169
- m, cnt = v , 1
124
+ m, cnt = x , 1
170
125
} else {
171
- if m == v {
126
+ if m == x {
172
127
cnt++
173
128
} else {
174
129
cnt--
@@ -179,19 +134,78 @@ func majorityElement(nums []int) int {
179
134
}
180
135
```
181
136
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
+
182
196
### ** Rust**
183
197
184
198
``` rust
185
199
impl Solution {
186
200
pub fn majority_element (nums : Vec <i32 >) -> i32 {
187
201
let mut m = 0 ;
188
202
let mut cnt = 0 ;
189
- for & v in nums . iter () {
203
+ for & x in nums . iter () {
190
204
if cnt == 0 {
191
- m = v ;
205
+ m = x ;
192
206
cnt = 1 ;
193
207
} else {
194
- cnt += if m == v { 1 } else { - 1 };
208
+ cnt += if m == x { 1 } else { - 1 };
195
209
}
196
210
}
197
211
m
@@ -203,19 +217,25 @@ impl Solution {
203
217
204
218
``` php
205
219
class Solution {
220
+
206
221
/**
207
222
* @param Integer[] $nums
208
223
* @return Integer
209
224
*/
210
225
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
+ }
217
237
}
218
- return $major ;
238
+ return $m ;
219
239
}
220
240
}
221
241
```
0 commit comments