Java 在有序列表中查找元素的最佳算法
有一个列表,其中包含按升序排列的数字 类似地,列表B也包含按升序排列的数字 结果应该是列表C,其中包含A中不在B中的数字 我的解决方案: 我迭代了A,并使用.contains检查了B中的数字,并在C中添加了必需的元素 有人告诉我,使用.contains时的复杂度更高Java 在有序列表中查找元素的最佳算法,java,algorithm,iteration,Java,Algorithm,Iteration,有一个列表,其中包含按升序排列的数字 类似地,列表B也包含按升序排列的数字 结果应该是列表C,其中包含A中不在B中的数字 我的解决方案: 我迭代了A,并使用.contains检查了B中的数字,并在C中添加了必需的元素 有人告诉我,使用.contains时的复杂度更高 有谁有更好的解决方案吗?是的,您的方法将使用^2。开始的想法就像将两个排序列表合并为一个。将两个已排序列表合并为一个是一个并集。在两个排序列表中查找公共元素是一个交叉点。您的问题是找到两个排序列表的集合差。在纸上画一个简单的例子,你
有谁有更好的解决方案吗?是的,您的方法将使用^2。开始的想法就像将两个排序列表合并为一个。将两个已排序列表合并为一个是一个并集。在两个排序列表中查找公共元素是一个交叉点。您的问题是找到两个排序列表的集合差。在纸上画一个简单的例子,你会发现你可以使用两个迭代器来按时完成它。使用类似合并排序的合并例程,使用以下条件将列表中的元素添加到C中:- 如果B->datadata,只需迭代B ifB->data==A->数据迭代A&B ifA->datadata将A->data添加到C并迭代A
时间复杂度在嗯,你知道列表是经过排序的,所以你不必一直在B中搜索,你可以同时在A和B中搜索。你在第一个if中有一个坏条件,它应该是B->data