提高代码的时间效率

时间:2018-04-05 01:27:25

标签: java

如何编辑此代码以提高时间效率?

public static LLList intersect(LLList list1, LLList list2) {
    LLList inters = new LLList();

    for (int i = 0; i < list1.length(); i++) {
        Object item1 = list1.getItem(i);
        for (int j = 0; j < list2.length(); j++) {
            Object item2 = list2.getItem(j);
            if (item2.equals(item1)) {
                inters.addItem(item2, inters.length());
                break;   // move onto the next item from list1
            }
        }
    }

    return inters;
}

1 个答案:

答案 0 :(得分:2)

解决问题:您正在使用两个for循环并将每个列表的项目与其他列表项目进行比较。结果解决方案是O(n ^ 2)。

优化的解决方案:您可以使用HashMap而不是比较,然后使用O(n)复杂度将一个列表项插入其中。

然后使用循环检查HashMap中的项目是否存在,第二个循环也具有O(n)复杂度。

因此,解决方案的复杂性将是O(N)+ O(N)。

  

请检查最终解决方案:

public static LLList intersect(LLList list1, LLList list2) {
    LLList inters = new LLList();

    Map<LLList, Integer> list1Map = new HashMap<>();

    for(int i = 0; i < list1.length; i++) {
       list1Map.put(list1.getItem(i), 1);
    }

    for(i = 0; i < list2.length; i++) {
       if(list1Map[list1.getItem(i)] == 1) {
          inters.addItem(list1.getItem(i)], inters.length());
       }
    }

    return inters;
}