df = pd.merge(df1, df2, how='outer')
此代码的时间复杂度为O(n ^ 2),面试官要求我将其更改为O(n)。我们该怎么做?
答案 0 :(得分:2)
这是一个满足O(n)
要求的解决方案,那就是使用HashSet
-HashSet
不会接受重复的值,因此只需要一个循环,也就是说,如果要求允许使用声明的HashSet
:
int[] a = {3,5,4,3,2,2,1};
// Create a set
Set<Integer> set = new HashSet<Integer>();
//Create a set for storing duplicates
Set<Integer> setDupes = new HashSet<Integer>();
System.out.println("Duplicate elements are: ");
//loop the array once
for (int num : a)
{
if (set.add(num) == false)
{
// your duplicate element
if(setDupes.add(num) == true)
System.out.println(num + " ");
}
}
答案 1 :(得分:0)
这取决于您要在循环中执行的操作。如果它们不相关,则可以将它们合并为一个
答案 2 :(得分:-4)
当循环不依赖时,您可以将循环重写为:
for (int i = 0, j=0; i < n && j<n; i++;j++) {
//do something in constant time
}