從leetcode學到更多

2021-08-19 18:33:39 字數 1942 閱讀 9984

4sum**

class solution {

public list> foursum(int num, int target) {

arraylist> ans = new arraylist<>();

if(num.length<4)return ans;

arrays.sort(num);

for(int i=0; itarget)break; //first candidate too large, search finished

if(num[i]+num[num.length-1]+num[num.length-2]+num[num.length-3]0&&num[i]==num[i-1])continue; //prevents duplicate result in ans list

for(int j=i+1; jtarget)break; //second candidate too large

if(num[i]+num[j]+num[num.length-1]+num[num.length-2]i+1&&num[j]==num[j-1])continue; //prevents duplicate results in ans list

int low=j+1, high=num.length-1;

while(low從最外層一直到次外層,都有break和continue操作,每次迴圈開始的時候,可以從極端開始判斷是否繼續操作,對於如此大時間複雜度的演算法,可以節省不少時間。

2sum演算法作為這個演算法的一處對時間複雜度做指數級優化的演算法,因為之前做過排序的操作,所以可以從雙尾開始計算,導致時間複雜度從o(n^2) 銳減到 o(n). 令人不禁聯想到fastsort的實現方法。

總時間複雜度為o(n^3)。

另外有一種以空間換時間的說法,即是將2sum所有可能的值存在map中,然後2者相加。但是需要進行一些判重的判定,較為麻煩。時間複雜度為o(n^2).或許需要重複操作類似資料的時候較為可行~~~

2.merge k sorted lists

開始一看不就是歸併?分治 hard?不存在的

覺得很簡單嘛,歸併排序我寫過不少次了

結果遇到一堆坑!!!!!

首先他採用的是listnode形式的,也就是鍊錶

傳參為listnode lists

我使用arrays.aslist(lists)

儲存型別為list

我用了乙個arraylist 來訪問要刪除索引,

然後刪除不了。。。。是的,這裡並不會自動拆箱為int,把integer當作乙個object了

可以採取兩個方法:

直接取integer.intvalue

儲存型別為arraylist //只能放物件,

總算改過來了,然後????

然後不能刪除,直接報錯unsupportedoperationexception

arrays.aslist 生成的list為淺拷貝陣列的

而且只能修改物件的屬性,甚至是更換物件,但是怎麼都不能增刪物件

更改。。。。

再然後我發現刪除的時候,報錯,刪除的超過界限

是因為我刪除的索引並沒有一定的順序,刪除之後索引發生了改變

把索引列表進行sort然後reverse

這樣可以解決

對於之前的某個操作也存在這樣的問題,

謹記遍歷的時候,對於陣列索引和長度等操作,一定要謹慎

對於原始的鍊錶,一定要謹慎操作!

想寫個複雜的,我處理size = size/2 +size%2

size = 8

我寫的 size= size>>2 + size&1

然後錯了。。。我確實真的是忘了 +的優先順序大於》 大於&

結果當然是悲慘的0 size = (size>>2) + (size&1)

這樣才正確

還是經驗不是很足,

多多彌補

從數學到語文

從剛剛接觸程式的時候,我一直是推崇,程式的數學之美,即,程式中的演算法是經過數學處理以後的展現。我認為計算機就是現代數學的體現。我知道我的理解是沒有錯誤的,因為,幾乎所有的計算機大家都是數學出身,他們提出的演算法,他們發明的語言,無疑都是經典的,不衰的。但是,自從工作以來,我發現了,程式的語文是勝過...

從dir學到的

dir函式可以接受任何型別引數,如型別,物件,模組等.下面一段程式將說明dir乙個模組,類,物件時的情況 先寫乙個模組 python class person def init self,name self.name name def getname self return self.name he...

從Disucz能學到什麼

其實吧,我脫離技術大概五年多了,五年沒有coding,沒有code review,沒有跟員工討論具體技術實現問題,啊,不是完全沒有,有一次半夜急了跟開發商調bug,就那麼一次,手生的厲害,所幸搞定了 偶爾遇到一些圈裡朋友諮詢技術問題,都是靠當年帶出來的徒弟或者其他朋友幫忙應付。所以今天我去談技術,都...