检查一个数组是否大于另一个数组

时间:2018-03-13 18:32:07

标签: java algorithm

给定两个整数数组A和B,返回true iff。对于A中的每个整数,B中有一个更大的整数。需要有1到1的映射,A中的每个整数都必须在B中找到它自己的更大的整数。

示例:

>>> df1 = df.groupby(['Month', 'Day', 'Hour']).mean()
>>> df1
                       Year      Count      Value
Month Day Hour                                   
1     1   1     2015.333333  38.666667  22.666667
2     3   4     2014.000000  34.000000  43.000000

我目前的解决方案是O(n ^ 2),我为A中的每个元素迭代B.是否有更好的方法?

4 个答案:

答案 0 :(得分:4)

你可以在O(n logn)中完成。

  1. 对两个列表进行排序 - O(n logn)
  2. 使用例程类似 1 到Merge sort的merge例程,遍历两个数组,试图找到更大的整数伙伴 - O(n)
  3. 1 在合并排序的合并例程中,我们比较两个运行索引指向的两个数字(每个数组一个)并选择较小(或较大)的数字并将其存储在一个新的数组并将我们从中选取元素的索引移动一个。但是在这里,必须是一对一的映射。

答案 1 :(得分:1)

这是user7描述的算法的Java 8+实现:

import java.util.Arrays;
import java.util.stream.IntStream;

public static boolean isGreater(int[] a, int[] b) {
    if (b.length < a.length) {
        return false;
    }
    final int[] sortedA = Arrays.stream(a).sorted().toArray();
    final int[] sortedB = Arrays.stream(b).sorted().toArray();
    return IntStream.range(0, a.length).allMatch(i -> sortedA[i] < sortedB[i]);
}

Ideone Demo

答案 2 :(得分:0)

你可以看一下桶排序:

  

Bucket sort或bin sort是一种排序算法   将数组的元素分配到多个桶中。每   然后使用不同的排序单独对存储桶进行排序   算法,或递归应用桶分类算法。

但是,如果同时执行两个存储桶排序,合并存储桶,则如果其他较大存储桶中已有足够的元素,则无需对某些存储桶进行排序。所以我们可以在一般情况下节省一些时间。

此外,你可以在每个桶中使用选择排序,以获取桶中的K个最大项目,如果另一个相应的桶只有K个项目。

答案 3 :(得分:0)

一个简单的

Arrays.compare(b,a)

将完成这项工作。如果在每个元素中数组b> = a,它将返回1,否则它将返回-1