Leetcode刷題筆記 持續更新 Day01

2021-10-14 15:31:28 字數 2643 閱讀 7510

是要在給定的類下寫函式完成功能,由於是才開始刷題,所以對給的函式體不熟悉,連vector< int >都不知道是啥。

從今天開始堅持刷題,並將刷題的心得及時記錄下來,希望可以從這個寒假開始,真正為自己開始努力。

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

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。

你可以按任意順序返回答案。

看到題目之後便會直接想到的便是由兩層迴圈,直接找到兩個相加之和為target的陣列下標(這也是我目前所能會的唯一乙個方法。。。)

但是由於在學校學的c++並不深,因此不知道應該怎麼輸出,函式是vector< int >的返回值,所以得重新建立乙個陣列用於輸出(後來在題解區看到官方題解**中直接return了就也就不需要建立額外的陣列了。

而我在這裡就用到了vector< int> 中的乙個函式push_back(),這個函式的作用是在陣列最後新增乙個元素。

我的**:

class

solution}}

return res;}}

;

注意到上乙個方法的時間複雜度較高的原因是尋找 target - x 的時間複雜度過高。因此,我們需要一種更優秀的方法,能夠快速尋找陣列中是否存在目標元素。如果存在,我們需要找出它的索引。

使用雜湊表,可以將尋找 target - x 的時間複雜度降低到從 o(n)降低到 o(1)。

這樣我們建立乙個雜湊表,對於每乙個 x,我們首先查詢雜湊表中是否存在 target - x,然後將 x 插入到雜湊表中,即可保證不會讓 x 和自己匹配。

class

solution;}

hashtable[nums[i]

]= i;

}return;}

};

給你兩個非空的鍊錶,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位 數字。

請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。

你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

看到之後就有一種比較熟悉的感覺,因為在資料結構課上做過兩個鍊錶合併並排序的演算法,因此覺得還是很容易的,就只是遇10進1的地方有一點不同。

討論l1和l2是否為空,若l1為空則將l2給到l1,這樣就不需要寫兩個判斷分別判斷l1或l2為空的情況了。

但是在寫的時候還是出了狀況,因為在課上寫的**都是自己typedef的結構體,然後利用指標的next完成鍊錶操作,在類裡面寫的倒是沒有,因此在細節的處理上,比如p每次都要new,用到類裡面的建構函式,之前沒接觸過,這次算是了解了…

/**

* definition for singly-linked list.

* struct listnode

* listnode(int x) : val(x), next(nullptr) {}

* listnode(int x, listnode *next) : val(x), next(next) {}

* };

*/class

solution

if(l1==

null

) l1=l2;

while

(l1)

if(temp)

return l3-

>next;}}

;

ps:為啥例項中別人的**明明執行時長挺短,但我一執行就特慢,還沒有我的執行快。。還有記憶體消耗也是

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

拿到題目後感覺很簡單,就想著暴力列舉遍歷,但是在寫for迴圈的時候有點方,不知道應該怎麼迴圈,外面的乙個for比較好寫,但是裡面的就不知道該怎麼寫。想到的是從s[0]開始與後面的比,當匹配到相同的字元時就把前面的長度存下來,再從s[1]開始比。

class

solution

} maxlength=

max(front-back+

1,maxlength);}

return maxlength;}}

;

可以使用「滑動視窗」來解決這個問題了:

我們使用兩個指標表示字串中的某個子串(的左右邊界)。其中左指標代表著上文中「列舉子串的起始位置」,而右指標即為上文中的 rk;

在每一步的操作中,我們會將左指標向右移動一格,表示 我們開始列舉下乙個字元作為起始位置,然後我們可以不斷地向右移動右指標,但需要保證這兩個指標對應的子串中沒有重複的字元。在移動結束後,這個子串就對應著 以左指標開始的,不包含重複字元的最長子串。我們記錄下這個子串的長度;

在列舉結束後,我們找到的最長的子串的長度即為答案。

class

solution

while

(rk +

1< n &&

!occ.

count

(s[rk +1]

))// 第 i 到 rk 個字元是乙個極長的無重複字元子串

ans =

max(ans, rk - i +1)

;}return ans;}}

;

Leetcode刷題筆記 持續更新 Day05

今天堅持住了,因為每日一題很簡單,沒用到什麼複雜演算法,要不我這小腦袋瓜是絕對不行的。自己寫出來的,但是提交結果就很 來張截圖,這就是贏了空間敗給時間麼 結果看了一些別人的,才發現上頭了。在思路裡說 在乙個 xy 座標系中有一些點,我們用陣列 coordinates 來分別記錄它們的座標,其中 co...

Leetcode刷題筆記

1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...

LeetCode刷題筆記

實現strstr 給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 haystack aaaa...