Last updated
Last updated
這一題的題目敘述寫的沒有非常清楚,在面試的時候要問清楚。沒寫清楚的地方是題目說了這是一個沒有排序過的陣列,但是實際上要找的字序列,並不是要按照原本題目的順序的。
例如題目中給的例子:
如果要抱持原先的順序,那只有一個子序列是 [1, 2]
,但是題目期待的答案是 [1, 2, 3, 4]
這個子序列。如果說要暴力解,最直覺的少說也一定要兩個 for
迴圈,時間複雜度絕對大於 (實際上是)。
但是這題可以很快速的簡化,那就是如果先做了排序,時間複雜度就可以直接降低成 ,因為排序過後的陣列,就可以直接找出是不是連續子序列,其中陣列裡面有可能會有重複的值,但是重複的值是沒辦法放入子序列的,可以一開始就用把所有重複的值給去掉。
上面的做法有在官方裡面,我當時想到的方法是另外一個,其實時間複雜度也是一樣,原理也和上面的作法一樣,只是我的排序的方法是透過將元素加入到 heap 裡面,接著再一個一個把最小值 pop 出來,如果前一個最小值比我的當前值小於一,那我就繼續累加,如果不是差一,重新設定計數器。