1. 程式人生 > >Leetcode解題技巧總結

Leetcode解題技巧總結

遞迴的出口和和引數不滿足條件

  1. 引數不滿函式處理的條件,直接返回錯誤程式碼
  2. 判斷出口條件

優先順序佇列

//使用PriorityQueue實現大頂堆

//PriorityQueue預設是一個小頂堆,然而可以通過傳入自定義的Comparator函式來實現大頂堆。如下程式碼:
private static final int DEFAULT_INITIAL_CAPACITY = 11;
PriorityQueue<Integer> maxHeap=new PriorityQueue<Integer>(DEFAULT_INITIAL_CAPACITY,
new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2-o1; } });

優先順序佇列參考連結
參看資料

快速排序演算法中思想應用

quickselect
leetcode:215. Kth Largest Element in an Array

DFS和回溯

首先如何考慮往下走,深度下去, 然後回溯回來
程式碼結構體

  1. 函式體(要處理的結果集nums,函式處理的進口0,path, result)
  2. Dfs(最後結果result,中間結果path,處理的結點開始位置, 剪枝開始條件)
    • 剪枝條件
    • 迴圈, 處理為i
      • 去重
      • Path新增處理的元素 path.add(i)
      • 深度下去,考慮下一步 (是i還是i+1)
      • 回退程式碼體 path.remove(i)
        中間結果是怎樣處理的

hashmap 進行統計計數的情況

取出一個判斷一次即可

程式執行過程中

要學會沒執行完一個過程就要判斷是否滿足了條件

雙指標

採用雙指標逼近最大值的情況,類似於選擇排序演算法

寫程式碼的習慣

先判斷條件然後在決定是否做,將判斷放在前面,如果滿足或者不滿足都立刻返回,這樣可以直接得到結果好很多情況
比如 55. Jump Game