Merge pull request #531 from marshcat0/patch-4

Update 剑指 offer 题解.md
This commit is contained in:
郑永川 2019-01-07 20:21:29 +08:00 committed by GitHub
commit f0a6d924d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1853,7 +1853,7 @@ private void backtracking(char[] chars, boolean[] hasUsed, StringBuilder s) {
多数投票问题,可以利用 Boyer-Moore Majority Vote Algorithm 来解决这个问题,使得时间复杂度为 O(N)。
使用 cnt 来统计一个元素出现的次数cnt初始为0。算法依次遍历数组中的数字遍历到一个元素时若cnt为0则令统计元素为遍历到的该元素并置cnt为1。若cnt不为0且当遍历到的元素和统计元素相等时令 cnt++,否则令 cnt--。如果前面查找了 i 个元素,且 cnt == 0说明前 i 个元素没有 majority或者有 majority但是出现的次数少于 i / 2 ,因为如果多于 i / 2 的话 cnt 就一定不会为 0 。此时剩下的 n - i 个元素中majority 的数目依然多于 (n - i) / 2因此继续查找就能找出 majority。
使用 cnt 来统计一个元素出现的次数cnt 初始为 0。算法依次遍历数组中的数字遍历到一个元素时 cnt 0则令统计元素为遍历到的该元素并置 cnt 1。若 cnt 不为 0且当遍历到的元素和统计元素相等时令 cnt++,否则令 cnt--。如果前面查找了 i 个元素,且 cnt == 0说明前 i 个元素没有 majority或者有 majority但是出现的次数少于 i / 2 ,因为如果多于 i / 2 的话 cnt 就一定不会为 0 。此时剩下的 n - i 个元素中majority 的数目依然多于 (n - i) / 2因此继续查找就能找出 majority。
```java
public int MoreThanHalfNum_Solution(int[] nums) {