面试中提出的时间复杂度问题

时间:2019-12-03 19:01:18

标签: java algorithm loops data-structures time-complexity

df = pd.merge(df1, df2, how='outer')

此代码的时间复杂度为O(n ^ 2),面试官要求我将其更改为O(n)。我们该怎么做?

3 个答案:

答案 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
    }