给你一个长度为 n 的数组,其中只有一个数字出现了大于等于 n/2 次,问如何使用优秀的 时空复杂度快速找到这个数字。

Posted forgo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给你一个长度为 n 的数组,其中只有一个数字出现了大于等于 n/2 次,问如何使用优秀的 时空复杂度快速找到这个数字。相关的知识,希望对你有一定的参考价值。

思路一:

如果我们把众数记为 +1,遇到相同数就加1,遇到不同的数就减1,把其他数记为 -1,将它们全部加起来,显然和大于 0,从结果本身我们可以看出众数比其他数多。

使用for循环取值几个数也许就查找到了。

方法二:哈希表
使用hashtab 实现计数也行。

我们使用哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。

 

以上是关于给你一个长度为 n 的数组,其中只有一个数字出现了大于等于 n/2 次,问如何使用优秀的 时空复杂度快速找到这个数字。的主要内容,如果未能解决你的问题,请参考以下文章

2021-12-19:找到所有数组中消失的数字。 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums(

位运算解决“一个数组中,只有一个数字出现n次,其他数字出现k次”问题

2021-10-29:除自身以外数组的乘积。给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之

39 数组中出现次数超过一半的数字(时间效率)

hdu-1711(hash)

剑指Offer:数组中出现次数超过一半的数字39