1. 程式人生 > >two sum, three sum和four sum問題

two sum, three sum和four sum問題

get 升級 子列 類比 兩個 時間復雜度 簡單 使用 -1

1. two sum問題

給定一組序列:[-4 -6 5 1 2 3 -1 7],然後找出其中和為target的一對數

簡單做法:兩層循環遍歷,時間復雜度為n^2

升級版:對給定的序列建立一個hash表,然後只需要外層一層循環就可以了,時間復雜度為n

2. three sum問題

給定一組序列:[-4 -6 5 1 2 3 -1 7],然後找出其中和為target的三個數

簡單做法:三層for循環,時間復雜度為n^3

升級版:

  如果看做是two sum升級,可以先從小到大排序,時間復雜度nlogn,然後固定一個數,前面的子列使用two sum的方法,

時間復雜度為n^2;

  也可以先排序,使用兩層for循環,遍歷子列,獲取前兩個數,然後對後面的hash過的子列找出另一個,時間復雜度為n^2;

3. four sum問題

可以類比three sum問題,時間復雜度可達到n^3

上述問題我就只能想到這種解法了,但是我感覺對時間復雜度還是不滿意

two sum, three sum和four sum問題