【发布时间】:2019-11-05 04:53:47
【问题描述】:
我必须检查每个元素是否有任何元素大于数组中的元素。这意味着,数组必须按降序排序。如果存在大于当前元素的任何元素,那么我计算该数字,因为数组中有多少数字大于我正在检查的当前元素。这样,我必须检查每个元素。我的输出必须是元素大于当前元素的总次数(考虑到数组的每个元素)。
问题是我必须在 O(n logn) 内完成。我可以用天真的方式来做,但是运行时间是 O(n^2)。
public class CountPairs {
public static int countPairs(int[] arr) {
int Pairs=0;
for (int i=0;i<arr.length;i++){
for (int j=i+1;j<arr.length;j++){
if (arr[i] < arr[j]){
Pairs++;
}
}
}
return Pairs;
}
}
例如: System.out.println(countPairs({3,1,4,2}) 应该返回 3。 请帮我解决这个问题。
【问题讨论】:
-
我会考虑使用树,尽管有几种方法可以改善运行时,但二叉搜索树似乎可以工作。
-
数组中是否允许重复?因为如果不是,则根据定义,所有元素
list[0]...list[i-1]在排序后对于任何i都大于list[i],并且使用二进制搜索查找任何给定数字的i将采用log(n)。
标签: java arrays performance