Evan的LeetCode刷題之路

2021-10-13 07:35:38 字數 2856 閱讀 2130

二、資料庫

以此記錄本人的leetcode刷題之路。 ——題目內容均**於leetcode

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

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

示例:

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

分析:

難度:c-

若是通過兩重迴圈對[1,n]和[i,n]進行遍歷,則時間複雜度為o(n

2n^2

n2),空間複雜度為o(1)。對於每個值nums[i],目的是要找到它以外等於target-nums[i]的值。則該查詢過程可用hashmap將時間複雜度降為o(1),整個時間複雜度為o(n

nn),空間複雜度為o(n

nn)。

**:

class

solution

; map.

put(nums[i]

,i);

}return

newint[0

];}}

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

如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

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

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

分析:

難度:c-

其實就是長整數的相加。題目中已經逆置降低了難度,一般還會要求寫出原地逆置的方法。難點不在演算法反而在於要仔細,不讓節點空引用。

**:

class

solution

if(q!=null)

res.val=

(label+m+n)%10

;if(label+m+n>=10)

else

} res=res.next;

}return ret;

}}

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

示例 1:

輸入: s = "abcabcbb"

輸出: 3

解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。

示例 2:

輸入: s = "bbbbb"

輸出: 1

解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。

示例 3:

輸入: s = "pwwkew"

輸出: 3

解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。

請注意,你的答案必須是 子串 的長度,"pwke" 是乙個子串行,不是子串。

示例 4:

輸入: s = ""

輸出: 0

0 <= s.length <= 5 * 104

s 由英文本母、數字、符號和空格組成

分析:

難度:c

將時間複雜度控制在o(n

nn),即通過一輪遍歷找出解。設定乙個頭指標,保證頭指標到當前指標無重複,當檢測到當前字元與串中字元重複時,則下標差即為乙個無重複串的長度。將每次的長度與已記錄最小長度取小者。

hashmap:

//思路過於狹窄,只考慮了重**生時的處理,應該從一般情況考慮,減少不必要的判斷

class

solution

head=map.

get(s.

charat

(i))+1

;}} map.

put(s.

charat

(i),i);}

return min>s.

length()

-head?min:s.

length()

-head;

//由於判斷條件限制,整個串無重複時需返回length

}}

桶:

class

solution

int n = s.

length()

;int res =0;

int start =0;

// 視窗開始位置

for(

int i =

0; i < n; i++

)return res;

}}

hashmap是我寫的,桶是大神寫的,在去掉那些沒必要的if之後執行效率仍然比用桶更低。我的邏輯是:當發生碰撞,計算長度;大神的邏輯是:持續計算長度,當發生碰撞重置。

開始刷題LeetCode

今天決定開始刷題,每天至少一題,如果題目確實沒有解決出來沒有關係,但是要保證每天至少接觸了一道新的題目!一定要堅持下去,現在是個菜鳥可能會感覺有點難度,堅持下去,總有一天會好的!今天是第一天,做的第乙個題目 reverse words in a string given an input strin...

leetcode刷題歷程

難度 簡單 題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 ...

LeetCode刷題總結

123 4567 891011 12 元素交換 swap a 1 a 3 sort排序 sort a.begin a.end 陣列顛倒 reverse a.begin a.end 陣列元素置為0 memset a,0,a.size 陣列取值 a.push back 定義二維陣列 vector vec...