給定一個鏈表(鏈表結點包含一個整型值)的頭結點?head。
同時給定列表?G,該列表是上述鏈表中整型值的一個子集。
返回列表?G?中組件的個數,這里對組件的定義為:鏈表中一段最長連續結點的值(該值必須在列表?G?中)構成的集合。
示例?1:
輸入:?
head: 0->1->2->3
G = [0, 1, 3]
輸出: 2
解釋:?
鏈表中,0 和 1 是相連接的,且 G 中不包含 2,所以 [0, 1] 是 G 的一個組件,同理 [3] 也是一個組件,故返回 2。
示例 2:輸入:?
head: 0->1->2->3->4
G = [0, 3, 1, 4]
輸出: 2
解釋:?
鏈表中,0 和 1 是相連接的,3 和 4 是相連接的,所以 [0, 1] 和 [3, 4] 是兩個組件,故返回 2。
注意:如果?N?是給定鏈表?head?的長度,1 <= N <= 10000。
鏈表中每個結點的值所在范圍為?[0, N - 1]。
1 <= G.length <= 10000
G 是鏈表中所有結點的值的一個子集.來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/linked-list-components
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
解法:
class Solution {
public:int numComponents(ListNode* head, vector<int>& G) {int res = 0;unordered_set<int> nodeSet(G.begin(), G.end());while (head) {if (nodeSet.count(head->val) && (!head->next || !nodeSet.count(head->next->val))) {++res;}head = head->next;}return res;}
};
?