日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Depth-first Search深度优先搜索专题6

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Depth-first Search深度优先搜索专题6 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

472 Concatenated Words

思路:將詞典使用Trie樹表示。對于輸入的詞word,在Trie樹上找,當遇到一個isWord=true的節點,查看剩下部分的詞是否在詞典中。
例如輸入 [“cat”,”cats”,”catsdogcats”,”dog”,”dogcatsdog”,”hippopotamuses”,”rat”,”ratcatdogcat”]
查找詞cat:盡管cat是詞,但是只有一個單詞,不能加入結果。
查找詞catsdogcats:發現cat是詞,繼續查找sdog…;發現以s開始的詞不存在;返回上層查找cats是詞,繼續查找dog…。catsdogcats = cats+dog+cats。多一個字母,少一個字母都不是這樣的組合。例如catsdogcatss=cats+dog+cats+s,s不在詞典中,不能加入結果。
代碼

124 Binary Tree Maximum Path Sum

思路:一棵樹的路徑可以是節點本身,也可以是具有父子關系的節點。例如Node(-10),其路徑可以是Node(-10),也可以是Node(-10)->Node(9),還可以是Node(-10)->Node(20) ,還可以是Node(-10)->Node(20)。
圖1
對于Node(n)我們知道n,如果我們知道Node(n)左右子節點的路徑和,就可以求得以Node(n)為根節點的最大路徑和是多少。max(n,leftSum,rightSum,n+leftSum,n+rightSum,n+leftSum+rightSum)。
接下來的問題是子節點的路徑和怎么求?
如果是葉子節點,路徑和就是Node的value。
如果是父節點,例如圖1的Node(20),返回的路徑和應該是20+15,因為20+15>20+720+15>20+7
圖2
如果是圖2的Node(-20),應該返回-20+15,這個值不是Node(-20)的最大路徑和,但是是路徑包含Node(-20)這個點最大的路徑和。
圖3
如果是圖3的節點Node(4)的左子樹路徑和是11+7=18,因為11+7>11+211+7>11+2
注意:節點的路徑一定是指節點經過其中左子樹或者右子樹的路徑。

再說一下求在節點Node(n)最大路徑和的計算式:max(n,leftSum,rightSum,n+leftSum,n+rightSum,n+leftSum+rightSum)。如果我們設一個全局變量maxValue記錄每處理一個節點時候的路徑和最大值。那么maxValue>=leftSummaxValue>=leftSum,并且maxValue>=rightSummaxValue>=rightSum,這個是根據上面的描述得到的。所以leftSum,rightSum不需要參與比較。n+leftSum,n+rightSum,n+leftSum+rightSum是分別考慮了leftSum,rightSum為負數的情況。那么n+leftSum=n+leftSum+0n+leftSum=n+leftSum+0也就是認為rightSum=0。那么就可以取n+Math.max(leftSum,0)n+Math.max(leftSum,0)簡化表達式。對rightSum也同理。所以最后計算式變為max(n,n+Math.max(leftSum,0)+Max.max(rightSum,0))。
代碼

99. Recover Binary Search Tree

思路:完全不知道怎么做。
學習:從頁面知道了解法。中序遍歷搜索二叉樹,遍歷的結果應該是一個升序序列。

上圖這棵樹的中序遍歷結果是:1 2 3 4。
如果發現當前元素<前面的元素,則前面的元素需要換位置。
換到哪個位置呢?可能是當前位置,繼續遍歷,也可能是其他位置,但肯定是一個前元素<前面的元素的當前位置。

在中序遍歷上圖的時候,當訪問到Node(2),前一個節點是Node(3),Node(2)<Node3Node(2)<Node3,則Node(3)需要換位置,暫時決定把Node(2)和Node(3) 換位置,記下firstElement=Node(3),secondElement=Node(2)。繼續遍歷,如果發現<當前節點<前面的節點,則把secondElement=當前節點。
最后firstElement和secondElement交換位置(交換節點的值)。
代碼

839 Similar String Groups

思路:首先寫一個函數similar,判斷兩個字符串是否相似。其次,輸入有n個字符串,每個字符串兩兩比較,相似的字符串放入一組。使用Union-Find實現。(代碼)
學習:用DFS的思路。處理元素A[i]:A[i]與其他元素比較。發現相似元素A[j],就繼續使用A[j]去比較,一直比較完,同一組的元素比較完成。接著處理其他組的元素。學習網頁鏈接。這個解法真的很棒。以前對于使用dfs,總是在主函數中調用一次就結束了。這個思路告訴我,一次dfs找到同一組元素。其次,文章中將比較過的A[i]=null,也很棒。以前標記是否訪問過都會開辟boolean數組來實現。(代碼)

總結

以上是生活随笔為你收集整理的Depth-first Search深度优先搜索专题6的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。