Java 求两个整数数组的最长交集

Java 求两个整数数组的最长交集,java,algorithm,Java,Algorithm,我有这个问题,但不知道从时间复杂度和空间复杂度的角度来看,最好的解决方法是什么。 假设我有两个整数数组 a={1,2,3,4,5} b={2,3,4,5,6} 当然,它们不一定要被分类 所以问题是如何找到2,3,4,5?最好有一些代码。提前感谢这实际上是一个非常流行的编程问题。有一种动态规划方法可以解决这个问题。您可以在查看更多信息,为什么我们需要DP?问题是找到最长的交叉口,而不是任何交叉口。我漏掉了一点吗 有很多解决办法 int [] a = {...}; // n eleme

我有这个问题,但不知道从时间复杂度和空间复杂度的角度来看,最好的解决方法是什么。 假设我有两个整数数组

   a={1,2,3,4,5}
   b={2,3,4,5,6}
当然,它们不一定要被分类


所以问题是如何找到2,3,4,5?最好有一些代码。提前感谢

这实际上是一个非常流行的编程问题。有一种动态规划方法可以解决这个问题。您可以在

查看更多信息,为什么我们需要DP?问题是找到最长的交叉口,而不是任何交叉口。我漏掉了一点吗

有很多解决办法

int [] a = {...}; // n elements  
int [] b = {...}; // m elements  
可以将一个数组存储在字典中,并为另一个数组中的每个元素检查字典。那
O(n)
。由于字典的原因,这将占用您更多的空间。而且它还没有到位

另一个解决方案是,对于a中的每个元素,可以对b进行线性搜索。哪个是
O(n.m)

另一个是,;如果对这两个数组进行排序。然后对一个数组中的每个元素在另一个数组中进行二进制搜索。你会发现两者的交叉点。这将是
mlogn+nlogn
nlogm+mlogm


我们真的需要DP吗?

我希望此链接能解决您的问题。 您必须编写一个公共函数
,它将在两个数组中显示公共数字。 而且它只对循环使用一个。这就是为什么它的复杂性只有O(N)。


代码是用C编写的。但是我希望你能理解逻辑。

首先我们应该对数组进行排序,其次我们应该使用二进制搜索来找到这些数组的交集。 为什么?因为如果我们选择搜索交集,而不进行排序,我们的算法难度将是
N^2
,但是如果我们在搜索之前对数组进行排序,我们总共将有
[log_2(N)N+(N(log_2(N))到N^2)]

我的方法对大多数示例都很有用

最好有一些代码!如果数组未排序,请详细说明您的要求?是否返回最长的排序交叉点?请编辑您的问题,并在文本中提供清晰的问题陈述和/或在文本中包含更多示例,并提供答案;例如,对于a={1,2,3,4,5},b={2,3,1,4,5,6},对于a={1,3,7,5,13,13},b={2,13,7,1,4,5,13}。类似于@jwpat7的请求:请详细说明。例如,如果
a={1,2,3,4,5,6,7}
b={1,3,4,5,8}
,那么您希望结果是
{1,3,4,5}
还是
{3,4,5}
?第一个是,第二个是。每个问题都有众所周知的解决方案。