leetcode刷題筆記

2021-10-21 17:24:10 字數 3121 閱讀 4198

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

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

個人答案:

class

solution}}

v.push_back(0

);v.

push_back(0

);return v;}}

;

vector<

int>

twosum

(vector<

int>

& nums,

int target)

m.insert

(make_pair

(nums[i]

, i));

} v.

resize(2

,0);

return v;

}

可以使用雜湊表改進

雜湊表:用陣列的下標表示數值,用下標對應元素的值表示是否出現或位置。這裡用stl中的map容器實現。

count(key)成員函式,統計key的個數。

用雜湊表實現,時間複雜度比較低。

給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串 s ,判斷字串是否有效。

有效字串需滿足:

左括號必須用相同型別的右括號閉合。

左括號必須以正確的順序閉合。

bool

isvalid

(string s)

unordered_map<

char

,char

> pairs =,,

','}

; stack<

char

> stk;

for(

char ch : s)

stk.

pop();

}else

}return stk.

empty()

;}

總結:右括號總是與最近的括號進行匹配,因此用棧比較方便,左括號入棧,右括號則與棧頂匹配,若為同種括號,則出棧,否則返回false,用雜湊表進行匹配可以減少**量,降低空間複雜度,最後若判斷棧是否為空,若為空則全部匹配成功,返回true,否則返回false。

在乙個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。

個人答案:

int

findrepeatnumber

(vector<

int>

& nums)

v_hash[nums[i]]++

;}return0;

}

總結:利用雜湊表可以比較容易完成

請實現乙個函式,把字串 s 中的每個空格替換成"%20"。

個人答案:

string replacespace

(string s)

s.replace

(pos,1,

"%20");

}return s;

}

總結:利用stl可以很方便的完成

輸入乙個鍊錶的頭節點,從尾到頭反過來返回每個節點的值(用陣列返回)。

個人答案:

vector<

int>

reverseprint

(listnode* head)

vector<

int>v;

while

(!s.

empty()

)return v;

}

總結:從尾到頭,正好對應棧的後進先出,故可以先將鍊錶依次入棧,然後依次出棧,存入陣列中。思路2,利用vector的insert函式,將沒個結點插入到頭部,v.begin()。思路3,遞迴

class

cqueue

void

(int value)

st2.

push

(value);}

intdeletehead()

int ret = st1.

top();

st1.

pop();

if(st1.

empty()

)}return ret;}}

;

總結: 思路為乙個棧1只出棧(作為佇列頭部),棧2只入棧(作為佇列尾部),當棧1為空時,將棧2的元素依次出棧儲存到棧1中,便可以反轉入棧順序,實現先進先出。

//遞迴

class

solution};

//動態規劃

class

solution

return a;}}

;

總結:最後返回a是因為多執行了一次迴圈,簡化了單獨判斷n為0的情況,實際上a為斐波那契數列中的第n天的值,b是n+1天。

在乙個 n * m 的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個高效的函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

示例:

[

[1, 4, 7, 11, 15],

[2, 5, 8, 12, 19],

[3, 6, 9, 16, 22],

[10, 13, 14, 17, 24],

[18, 21, 23, 26, 30]

]

個人答案:

bool

findnumberin2darray

(vectorint>>

& matrix,

int target)

if(matrix[i]

[j]== target)}}

return

false

;}

本文的所有題目以及除「個人答案」以外的**均來自力扣(leetcode)。

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...

LeetCode刷題筆記

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...