OSDN Git Service

Update and rename mainelement to main-element
authorLTF <39181832+SDLTF@users.noreply.github.com>
Mon, 4 Jan 2021 10:53:32 +0000 (18:53 +0800)
committerGitHub <noreply@github.com>
Mon, 4 Jan 2021 10:53:32 +0000 (18:53 +0800)
docs/misc/main-element [moved from docs/misc/mainelement with 91% similarity]

similarity index 91%
rename from docs/misc/mainelement
rename to docs/misc/main-element
index b9f82a2..833b7cb 100644 (file)
@@ -1,9 +1,10 @@
-作者:``SDLTF``
+author: SDLTF
 
 ## 概述
 给一个有$n$个元素的数列,保证有一个数$a$出现的次数**超过**$50%$,求这个数。
 
-## 做法1:桶计数做法
+## 做法
+### 桶计数做法
 桶计数做法是出现一个数,就把这个数出现次数+1,很好懂:
 ```cpp
 for(int i = 0;i < n;i ++){
@@ -21,17 +22,19 @@ for(int i = 0;i < 10001;i ++){
 
 但是这个做法很浪费空间,我们不推荐使用。
 
-## 做法2:排序做法
+##排序做法
 显然,若一个数列存在主元素,那么这个主元素在排序后一定位于$\frac{n}{2}$的位置。
+
 那么我们又有想法了:
 ```cpp
     sort(a, a + n);
     cout<<a[n / 2 - 1];//因为这里数组从0开始使用,所以需要-1
 ```
 看起来不错!$O(N\log N)$的复杂度可还行?
+
 但是,一旦有$N\log N$,就一定有人想出$N$的做法。有吗?还真的有——
 
-## 做法3:主元素数列的特性
+##主元素数列的特性
 由于主元素的出现的次数超过50%,那么在不断的消掉两个不同的元素之后,最后一定剩下主元素。
 
 输入时判断与上一次保存的输入是否相同,如不同则删除两数,这里用栈来实现。