記一下leetcode刷題經驗

2022-06-23 20:21:09 字數 1264 閱讀 7506

第一題最簡單的兩數之和,題目長這樣:

//給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

思路:①一上來直接暴力解法選擇陣列的乙個 x 值,然後逐個遍歷陣列,找到數值等於 target-x 的值,記錄下標,返回,但是暴力解法時間複雜度達到了 o(n²),空間複雜度 o(1);

②改用雜湊解法,使用雜湊表,可以將尋找 target - x 的時間複雜度降低到從 o(n) 降低到 o(1),對於每乙個 x,我們首先查詢雜湊表中是否存在 target - x,然後將 x 插入到雜湊表中,即可保證不會讓 x 和自己匹配。

class solution    //返回匹配結果

}map.put(nums[i],i);

}return

newint[0]; //未匹配返回

}}

第二題是兩數相加,題目長這樣子:

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

思路:依舊借助雜湊表,由於輸入的兩個鍊錶都是逆序儲存數字的位數的,因此兩個鍊錶中同一位置的數字可以直接相加。同時遍歷兩個鍊錶,逐位計算它們的和,並與當前位置的進製值相加。如果兩個鍊錶的長度不同,則可以認為長度短的鍊錶的後面有若干個 0 。此外,如果鍊錶遍歷結束後,進製符不等於 0 ,還需要在結果的鍊錶後面附加乙個節點,節點的值為 進製 的值 。

class solution 

if (l2 != null)

}if(carry == 1)

return pre.next;

}

第三題是比較經典的滑動視窗問題,題目如下:

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。

思路:這個題目一上來就可以知道用滑動視窗去解決,利用雜湊表,逐漸遍歷字串,記錄當前最長不重複子串長度,往下遍歷發現重複字元則更改指標,再往下遍歷,同時更新此時的最長不重複子串的長度。

class solution 

count = math.max(count,end - start + 1);

map.put(c, end + 1);

}return count;

}}

總結:前幾道題目是比較簡單的型別,思路很好想到,但是轉變為**的能力太差,繼續多看多做吧!

Leetcode刷題經驗

該題可以很輕易地看出來是使用回溯 排序,排序是為了更好地剪枝。解題思路 假設輸入為can dida tes 2,3 6,7 ta rget 7。candidates 2,3,6,7 target 7。candid ates 2,3,6,7 t arge t 7。依次拿出can dida tescan...

LeetCode刷題經驗2

以下文字 自 leetcode 100 斬!從第 1 題開始,到現在也差不多快一年了,回顧紀念一下。為什麼開始刷題?從大一就知道了 leetcode,但刷題總是三天打魚,兩天曬網,會發現刷過的題,隔一段時間再看還是需要很久才能再想起來,於是就萌發了刷一題總結一題的想法。另一方面,leetcode 上...

LeetCode刷完了,紀念一下

歷時兩個月的刷題過程終於結束了,實話說比我自己預計的要快一點。演算法這方面基本算是零基礎開始的吧,應該說收穫良多,稍微列一下自己感受的變化。1 剛開始刷題的時候不知道什麼是鍊錶 二叉樹 動態規劃,遞迴都一知半解,都是一邊google一邊做。還記得碰到第一道逆序遍歷二叉樹的題目,雖然要求是用迭代來解,...