【发布时间】:2014-08-18 13:41:47
【问题描述】:
以下是我提出的一个算法问题,其动机是由一个我无法解决的更难的问题推动的。不幸的是,我也无法解决这个问题。
按递增顺序给您 n 个数字(n 介于 1 和 3*10^5 之间,因此需要线性运行时间)。每个数字的范围也从 1 到 3*10^5。对于从 1 到 3*10^5 的每个数字,将其表示为 z,您想找出有多少对数字具有 z 的成对差异。请阅读下面的示例以获得更清晰的信息。
数字:1,6,9
答:1对相差5(1,6),1对相差3(6,9),1对相差8(1,9)
数字:1,2,3,4
答:3对相差1(1,2 2,3 3,4),2对相差2(1,3 2,4),1对相差3(1,4) .
有没有一种数据结构可以用来在线性时间内解决这个问题?
【问题讨论】:
-
你确定这比其他问题更容易吗?
-
数字不同?出现一次后可以重复吗?
-
不,很遗憾我不确定。这是另一个问题:codeforces.com/contest/386/problem/C
-
是的,它们是不同的
-
@user3904846 另一个问题实际上要容易得多。
标签: c++ algorithm data-structures