Java 检查一个数组是否大于另一个数组
给定两个整数数组A和B,返回true iff。对于A中的每个整数,B中有一个较大的整数。需要有一个1对1的映射,A中的每个整数都必须在B中找到自己的较大整数 例如: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]
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)中完成
merge
例程类似的例程1遍历两个数组,试图找到其更大的整数伙伴-O(n)1在merge sort的merge例程中,我们比较两个运行索引指向的两个数字(每个数组一个),选择较小(或较大)的数字并将其存储在新数组中,并将从中选择元素的索引移动一个。但是这里必须有一个一一映射。您可以在O(nlogn)中完成
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怎么办