LeetCode刷題記錄本

2022-06-28 06:54:12 字數 2681 閱讀 9100

leetcode刷題記錄本

難度:簡單

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

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

示例

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

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

所以返回 [0, 1]

解題思路

可以看到題目給的前提條件是每種輸入都只會對應乙個答案,但是陣列中的同乙個元素不能使用兩邊,這樣我們可以通過迴圈陣列,然後將陣列元素的值作為key,座標作為value儲存到map中。

迴圈遍歷過程中,用target減去當前元素的值,獲取差值。然後去map中獲取這個插值,如果可以獲取到,就將這兩個座標儲存到返回的陣列裡面進行返回。

實現**

class solution  else  

}return returnintarray;

}}

難度:中等

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

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

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

示例

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

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

解題思路

我先說一下我剛開始的思路

我嘗試遍歷兩個單項列表,將其轉換為int,然後將兩個int進行相加(簡稱為sum),最後將這個sum轉換為string,然後遍歷這個string,將其每乙個值儲存到乙個listnode中,然後組裝成乙個單項列表。但是在實際執行測試過程中,leetcode提交的時候,如果給傳入了乙個比較長的單項列表作為引數,可能int的長度就直接溢位了,導致結果不對。因為無法規定listnode的長度要求,就算是換成long也有可能移除,所以這個方案不可靠

新的方案

0、定義乙個node head,再定義乙個end,end指向head,定義乙個進製數量carry

1、判斷兩個單項列表(下面簡稱l1,l2),如果兩個都為空就算是遍歷完了,但是只要有一不為空,那麼就繼續遍歷,只是兩外乙個的node的val永遠都是0了。

2、獲取l1+l2的值

4、那新的carry就是(l1+l2+carry)/10,當前的sum結果是(l1+l2+carry)%10

5、將end.next指向新建的node,node的val設定為sum

6、將end指標指向新建的node(end = end.next)

7、判斷一下l1和l2是否為空,如果不為空,分別將其指向自己的下乙個節點

8、當完成遍歷的時候,可能最後一位的和的結果大於10,所以需要判斷一下最終的carry是否大於0,如果大於0,需要再end的下乙個節點,指向乙個新的節點,節點值就是carry

9、由於我們剛開始建立的head的值為0,但是實際結果中我們不需要0這個節點,所以我們返回結果為head.next

實現**

/**

* definition for singly-linked list.

* public class listnode

* }*/class solution

if (l2 != null)

}// 判斷最終位計算是否超過了10

if (carry > 0)

return head.next;

}}

難度:中等

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

示例

輸入: "abcabcbb"

輸出: 3

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

解題思路

定義乙個map用來儲存字元和長度位置,value值為字元位置+1,+1表示從字元位置後乙個才開始不重複

定義不重複子串的開始位置start,結束為end

隨著end不斷的遍歷向後,會遇到和start,end區間內字元相同的情況,此時將字元作為key,獲取其value值,更新start,此時start,end區間內不存在重複字元

無論是否更新start都會更新其map資料結構和ans

時間複雜度o(n)

實現**

public int lengthoflongestsubstring(string s) 

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

map.put(c, end + 1);

}return ans;

}

leetcode刷題記錄

我覺得每天來兩道,練習練習,再看看人家是怎麼優化的。1.給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。c 暴力求解,204ms,9.1m class solution for index,num in enumerate ...

LeetCode刷題記錄

動態規劃和貪心演算法的異同點 class solution throw newruntimeexception 時間複雜度 o n 2 對於每個元素,我們試圖通過遍歷陣列的其餘部分來尋找它所對應的目標元素,這將耗費 o n o n 的時間。因此時間複雜度為 o n 2 需要一種方法,尋找符合要求的元...

leetcode刷題記錄

工作之餘刷刷題排解下寂寞 1 面試題66.構建乘積陣列 解題思路 題目要求可以簡化為求陣列中任意乙個元素左右兩邊所有元素的乘積。偷懶就用了乙個套路,練習了p c c python class solution def constructarr self,a list int list int 除法是...