例题:169 数组中有一个数出现次数超过了一半,找出这个数 点击此处返回总目录 习题1、229 数组有n个元素,找出其中超过1/3的元素
例题:169 数组中有一个数出现次数超过了一半,找出这个数 【题目】
【方法一】 对数组排序,中间那个数就是。
代码:
结果:
时间复杂度为o(nlogn)
【方法二:摩尔投票法】 每两个不同的数相互抵消。最后胜利的一定是要找的那个数,因为它人多。 比如:2 3 2 4 5 6 2 2 7 8 2 3 2 2 2 1. 2与3抵消 2. 2与4抵消 3. 5与6抵消 4. 2有两个 5. 2剩1个 6. 一个2与7抵消,还剩1个2 7. 2与8抵消 8. 2与3抵消 9. 2剩3个。 2赢了
代码:
结果:
时间复杂度为o(n)
记住方法二。
--------------------------------------------------------------------------------------------------------------------
习题1、229 数组有n个元素,找出其中超过1/3的元素
【题目】
【分析】 上一个题目是找出超过1/2的数,这个题目是找出超过1/3的数。 超过1/2的数最多只有一个。超过1/3的数最多有两个(要是有三个的话,总量就超过1了)。
怎么找呢?摩尔投票法变形。 维护两个变量。每三个不同的数相互抵消。则超过1/3的数一定在最后的这两个数中。 当然可能一个数都不是,可能只有一个数是,可能两个数都是。所以还需要验证一下。
【代码】
【结果】
|