每天 3 分鐘,走上演算法的逆襲之路。每日一道 leetcode 前文合集
github:
gitee:
編寫乙個程式,找到兩個單鏈表相交的起始節點。
如下面的兩個鍊錶:
在節點 c1 開始相交。
示例 1:
輸入:intersectval = 8, lista = [4,1,8,4,5], listb = [5,0,1,8,4,5], skipa = 2, skipb = 3
輸出:reference of the node with value = 8
輸入解釋:相交節點的值為 8 (注意,如果兩個鍊錶相交則不能為 0)。從各自的表頭開始算起,鍊錶 a 為 [4,1,8,4,5],鍊錶 b 為 [5,0,1,8,4,5]。在 a 中,相交節點前有 2 個節點;在 b 中,相交節點前有 3 個節點。
示例 2:
輸入:intersectval = 2, lista = [0,9,1,2,4], listb = [3,2,4], skipa = 3, skipb = 1
輸出:reference of the node with value = 2
輸入解釋:相交節點的值為 2 (注意,如果兩個鍊錶相交則不能為 0)。從各自的表頭開始算起,鍊錶 a 為 [0,9,1,2,4],鍊錶 b 為 [3,2,4]。在 a 中,相交節點前有 3 個節點;在 b 中,相交節點前有 1 個節點。
示例 3:
輸入:intersectval = 0, lista = [2,6,4], listb = [1,5], skipa = 3, skipb = 2
輸出:null
輸入解釋:從各自的表頭開始算起,鍊錶 a 為 [2,6,4],鍊錶 b 為 [1,5]。由於這兩個鍊錶不相交,所以 intersectval 必須為 0,而 skipa 和 skipb 可以是任意值。
解釋:這兩個鍊錶不相交,因此返回 null。
注意:
這方案是我自己想的,名字也是我自己起的,在 leetcode 上估計是找不到的。
題目上都說了,這兩個鍊錶因為長度不相同而導致無法同時迭代在相交的點匯合,那解題思路簡單粗暴,直接把不相同的長度減掉,讓兩個鍊錶在相同的位置同時開始迭代,相等的點肯定就是交點。
看起來效率還不賴麼。
以下這個方案來自:pipi的奇思妙想
分別為鍊錶a和鍊錶b設定指標a和指標b,然後開始遍歷鍊錶,如果遍歷完當前鍊錶,則將指標指向另外乙個鍊錶的頭部繼續遍歷,直至兩個指標相遇。
最終兩個指標分別走過的路徑為:
指標a:a + c + b
指標b:b + c + a
明顯a + c + b = b + c + a
,因而如果兩個鍊錶相交,則指標a和指標b必定在相交結點相遇。
這個方案的**寫起來是非常簡單的:
Leetcode 每日一道
如果不出意外每天會寫一道演算法題的部落格。如果題目簡單,就一天發布一道。如果題目比較難。我會2 3天發一道演算法的題目。今天寫的這道題目比較簡單。題目如下 解法我是用c 寫的。我的解法的大致想法是 先把需要轉換的矩陣直接轉換成一維的陣列,然後再根據要求把一維中的元素全部截為以c個元素為一組的vect...
每日一道 LeetCode 20 相同的樹
每天 3 分鐘,走上演算法的逆襲之路。每日一道 leetcode 前文合集 github gitee 給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 1 輸入 1 1 2 3 2 3 1,2,3 1,2,3 輸出 true 示例...
每日一道leetcode 最大括號深度
有效括號字串 定義 對於每個左括號,都能找到與之對應的右括號,反之亦然。詳情參見題末 有效括號字串 部分。巢狀深度 depth 定義 即有效括號字串巢狀的層數,depth a 表示有效括號字串 a 的巢狀深度。詳情參見題末 巢狀深度 部分。有效括號字串型別與對應的巢狀深度計算方法如下圖所示 給你乙個...