【问题标题】:counting number of distinct pairs such that i<j and A[i] =/= A[j]计算不同对的数量,使得 i<j 和 A[i] =/= A[j]
【发布时间】:2021-05-02 19:41:50
【问题描述】:

我正试图在O(n log n) 时间内解决这个问题。给定一个排序数组A,我如何确定不同对的数量,要求i &lt; jA[i]A[j] 是不同的数字?

一个例子是A = [1, 2, 3, 3],不同的对是(1,2), (1,3), (2,3)返回3

【问题讨论】:

  • 您的示例表明您正在询问不同对的数量(即不同对(A[i], A[j])),但您的问题也可以解释为要求索引的不同对的数量(即不同的对(i, j))。

标签: algorithm distinct


【解决方案1】:

从左到右扫描数组以查找唯一元素计数

if (A[i] != A[i-1])
    uniq_count++

注意时间是线性的O(n)

对于唯一元素的数量M的对数是

M*(M-1)/2

为什么?第一个元素与下一个元素形成M-1 对。第二个形成M-2 对(已经计算了一个),依此类推。结果是算术级数的总和。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 2019-04-19
    • 1970-01-01
    • 2021-11-11
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多