【发布时间】:2015-07-28 09:39:54
【问题描述】:
我有 N 个号码,比如说20 30 15 30 30 40 15 20。现在我想找出给定范围内有多少对数字。(L 和 R 给出)。
数字对=两个数字相同。
我的做法:
创建一个数组映射,使得 映射的键=数字,值=该数字出现的索引的数组列表。然后我从 L 遍历到 R 并且对于该范围内的每个值,我在相应的数组列表中遍历以查找是否存在适合范围的对,然后递增计数。
但我认为这种方法太慢了。有没有更快的方法来做同样的事情?
示例:对于上面给定的序列和 L=0 和 R=6 答案=5。可能的配对是 20 的 1、15 的 1 和 30 的 3。
我正在开发一个解决方案,假设数字可以达到 10^8(并且非负数)。
【问题讨论】:
-
其实我的想法和你一模一样!我认为这是最简单快捷的方法。
-
如果你用数组来计算一个元素重复了多少次,它会比映射消耗更多的大小和时间。
-
我可以将数组用于小整数。但是如果数字大于 10^7 会怎样。
-
这就是我的意思。我的东西映射是最快的方法。当我尝试在 ACM 等竞争性竞赛中解决问题时,我首先想到的是地图!不会浪费内存和时间。
标签: algorithm array-algorithms