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

思路一: 如果我们把众数记为 ,遇到相同数就加 ,遇到不同的数就减 ,把其他数记为 ,将它们全部加起来,显然和大于 ,从结果本身我们可以看出众数比其他数多。 使用for循环取值几个数也许就查找到了。 方法二:哈希表使用hashtab 实现计数也行。 我们使用哈希映射 HashMap 来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。 ...

2020-07-26 13:15 0 603 推荐指数:

查看详情

给定一个长度N数组,找出出现次数大于n/2,n/3的数,要求时间复杂度O(n),空间复杂度O(1)

  先讨论出现次数大于n/2的数字,如果这样的数字存在,那么这个数出现的次数大于其他数出现的次数的总和。 在数组A中,我们定义两个数据集合a1,a2。a1为出现次数大于n/2的数的集合,a2为其余数组成的集合。对于数组 A中元素a、b,假设a不等于b,那么有两种情况,分别为:a属于a1,b属于 ...

Fri Nov 01 04:59:00 CST 2019 0 300
一个整型数组里除了一个或者两个或者三个数字之外,其他的数字出现了两。请写程序找出这两个只出现数字。要求时间复杂度是O(n),空间复杂度是O(1)

粗糙的给出了分析,最近比较累,以后会改进的。 题目中包括三个小的问题,由简单到复杂: 1,如果只有一个出现,考察到异或的性质,就是如果同一个数字和自己异或的活结果为零,那么循环遍历一遍数组,将数组中的元素全部做异或运算,那么出现数字全部异或掉了,得到的结果就是只出现 ...

Fri May 01 17:15:00 CST 2015 0 2374
[java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n))

收藏一下,请直接点击原帖地址:http://blog.csdn.net/hpf911/article/details/9275583 这是《剑指Offer》中的一道题目,数组中的元素可能是正负,所以连续的子组求和,会变大也可能变小,解题时首先要求当前的和(初始值为0)和下一个元素求和后 ...

Sun Apr 24 07:15:00 CST 2016 0 2571
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM