• 在Collection中查找指定元素是否存在,用HashSet: add() remove() contains() 全部o(1)
  • 在Collection中查找指定元素是否存在,并通过该元素A找B,用HashMap: put(k,v) remove(k) containsKey(k) get(k) 全部o(1)
  • 加在尾,删在尾,看在尾,用Stack: push() pop() peek() 全部o(1)
  • 加在尾,删在头,看在头,用Queue: add() remove() peek() 全部o(1)
  • 加在头,删在头,看在头,加在尾,删在尾,看在尾, 用Deque 全部o(1)
  • 二分查找法 O(lgn)

  • 寻找数组中的最大/最小 O(n)

最大/最小 加入新元素 删除极值 删除指定元素 查找指定元素 查找极值
B.S.T o(lgn) o(lgn) o(lgn) o(lgn) o(lgn) 两头
Heap o(lgn) o(lgn) o(n) o(n) o(1)一头

PriorityQueue<T> heap = new PriorityQueue<>((o1,o2)-> expression); 允许重复

  • 加入( -: o1 前 o2 后 +:o2 前 o1后 0:前后无所谓 )

  • 删除(与comparator无关,用的iterator 和equals() )

TreeMap<K,V> bst = new TreeMap<>((o1,o2)-> expression);   不允许重复
TreeSet<T> bst = new TreeSet<>((o1,o2)-> expression);   不允许重复
  • 加入( -: o1 前 o2 后 +:o2 前 o1后 0:不加/替换)

  • 删除( -: o1 前 o2 后 +:o2 前 o1后 0:找到了)

空间复杂度

  • 多开一个辅助的数组: O(n)
  • 多开一个辅助的二维数组: O(n^2)
  • 多开常数空间: O(1)
  • 递归调用中,递归的深度是多少,递归过程所占的空间复杂度就是多少

怎样测出一个method的执行时间?

long startTime = System.nanoTime();
methodToTime();
long endTime = System.nanoTime();
long duration = (endTime - startTime);  //divide by 1000000 to get milliseconds.

results matching ""

    No results matching ""