【发布时间】:2013-12-02 18:20:57
【问题描述】:
例如我有数组:
int IDs[]={1,21,5,3,12,23,2};
顺序错误的对数为9。对是:(21, 5) (21,3) (21, 12) (21,2) (5,3) (5,2) (3,2) (12,2) (23,2)。
所以,我的算法意味着两个 for:
for(int i=0;i<IDs.length;i++)
{
for(int j=i+1;j<IDs.length;j++)
{
if(IDs[i]>IDs[j])
wrong++;
}
}
问题在于它的复杂度为 n2,而我的复杂度应该是最大 n*log n。
【问题讨论】:
-
我认为您可以使用修改后的 BST 来做到这一点。每次您必须向左分支(通过添加新的左孩子或进一步向下现有节点)时,您都会添加新的“错误顺序”对。具体来说,为您刚刚离开的节点添加一个新对,并为该节点的每个后代添加一对到右侧。试试看,你就会明白我的意思了。
标签: java arrays algorithm time-complexity