Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查一个数组是否大于另一个数组_Java_Algorithm - Fatal编程技术网

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

Java 检查一个数组是否大于另一个数组,java,algorithm,Java,Algorithm,给定两个整数数组A和B,返回true iff。对于A中的每个整数,B中有一个较大的整数。需要有一个1对1的映射,A中的每个整数都必须在B中找到自己的较大整数 例如: int[] A = {1, 1, 5, 3}; int[] B = {7, 5, 2, 3}; boolean result = isGreater(A,B); /* result is true because: A[0] < B[2], A[1] < B[3], A[2] < B[0], A[3]

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

例如:

int[] A = {1, 1, 5, 3};
int[] B = {7, 5, 2, 3};
boolean result = isGreater(A,B); 

/* 
result is true because:

A[0] < B[2], 
A[1] < B[3],
A[2] < B[0], 
A[3] < B[1].

Every integer in A found its greater integer in B. Note that multiple mappings can exist,
finding one is enough to return true.
*/
int[]A={1,1,5,3};
int[]B={7,5,2,3};
布尔结果=大于(A,B);
/* 
结果是正确的,因为:
A[0]
我当前的解决方案是O(n^2),我对A中的每个元素迭代B。有更好的方法吗?

您可以在O(n logn)中完成

  • 对两个列表进行排序-O(n logn)
  • 使用与merge sort的
    merge
    例程类似的例程1遍历两个数组,试图找到其更大的整数伙伴-O(n)

  • 1在merge sort的merge例程中,我们比较两个运行索引指向的两个数字(每个数组一个),选择较小(或较大)的数字并将其存储在新数组中,并将从中选择元素的索引移动一个。但是这里必须有一个一一映射。

    您可以在O(nlogn)中完成

  • 对两个列表进行排序-O(n logn)
  • 使用与merge sort的
    merge
    例程类似的例程1遍历两个数组,试图找到其更大的整数伙伴-O(n)


  • 1在merge sort的merge例程中,我们比较两个运行索引指向的两个数字(每个数组一个),选择较小(或较大)的数字并将其存储在新数组中,并将从中选择元素的索引移动一个。但在这里,必须有一个一一映射。

    这里是一个Java 8+算法实现,由以下内容描述:

    导入java.util.array;
    导入java.util.stream.IntStream;
    公共静态布尔值大于(int[]a,int[]b){
    如果(b.长度sortedA[i]

    下面是一个Java 8+算法实现,由以下内容描述:

    导入java.util.array;
    导入java.util.stream.IntStream;
    公共静态布尔值大于(int[]a,int[]b){
    如果(b.长度sortedA[i]

    您可以查看桶排序:

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

    但是,如果同时进行两个bucket排序,合并bucket,那么如果其他较大的bucket中已经有足够的元素,则不需要对某些bucket进行排序。因此,在一般情况下,我们可以节省一些时间


    此外,您还可以在每个bucket中使用选择排序,以获取bucket中最大的K个项目,例如,如果另一个对应的bucket只有K个项目。

    您可以查看bucket排序:

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

    但是,如果同时进行两个bucket排序,合并bucket,那么如果其他较大的bucket中已经有足够的元素,则不需要对某些bucket进行排序。因此,在一般情况下,我们可以节省一些时间

    此外,您还可以在每个bucket中使用选择排序,以获取bucket中最大的K个项目,例如,如果另一个对应的bucket只有K个项目。

    一个简单的

    Arrays.compare(b,a)
    
    我会做好的。如果每个元素中的数组b>=a,它将返回1,否则它将返回-1

    Arrays.compare(b,a)
    

    我会做好的。如果每个元素中的数组b>=a,它将返回1,否则它将返回-1,对两个数组进行排序,并同时对两个排序的数组进行迭代。应该是
    O(n log n)
    。对两个数组进行排序,并同时对两个排序的数组进行迭代。应该是<代码> o(n log n)< /代码>。@ Socowi不是词典编纂比较,在排序之后考虑以下2个数组:[ 1, 15 ],[ 2, 3 ]。通过字典比较,第二个比第一个大,但是它不适合算法的描述。@ M.AooSi可能对一个元素对是有意义的,这就是我从SooWoI的评论中想到的。@ Socowi不是词典编纂比较,在排序之后考虑以下2个数组:[ 1, 15 ],[ 2, 3 ]。通过词典比较,第二个比第一个大,但是它不符合算法的描述。@M.Aroosi可能对元素对有意义,这就是我从Socowi的评论中所想的。如果必须返回尽可能多的匹配项,你会怎么做?@AnnaVopureta我会使用
    for
    循环,而不是
    IntStream
    ,我将使用一个单独的索引变量来访问
    sortedB
    ,它只在找到匹配项时增加。当到达任一数组的末尾时,返回
    sortedB
    的当前索引。如果必须返回最大可能的匹配数,您会怎么做?@AnnaVopureta我将使用
    for
    循环,而不是
    IntStream
    ,我将使用一个单独的索引变量来访问
    sortedB
    ,它只在找到匹配项时增加。当到达任一数组的末尾时,返回
    sortedB
    的当前索引。如果我只想检查b>a怎么办