題目:
題解:
- 首先先噴題目,題目意思都沒說清楚,鏈表中一段最長連續結點的值這句話到底是啥意思呢?
- 自己做了第一遍後,發現過不了,然後檢查代碼也沒有發現異常,後來看了評論區才明白題目的意思,所以本題只要懂了題目意思就能馬上得解了。
- 題目大意:如果當前的節點在列表G中,並且下一個節點不在列表G中,我們就找到了一個組件的尾節點,將res加1
代碼如下:
class Solution {
public:
//題目意思:如果當前的節點在列表G中,並且下一個節點不在列表G中,我們就找到了一個組件的尾節點,將res加1
int numComponents(ListNode* head, vector<int>& G) {
set<int> record;
for(int& g:G)record.insert(g);
int res=0;
ListNode *cur=head;
while(cur)
{
//cur在G中,邏輯或先檢查前一個是否爲真,前一個爲真直接返回true,前一個爲假在檢查後一個是否爲真
//所以先判斷cur的next是否空,爲空則res++;若不爲空,在判斷cur的next是否在G中即可
if(record.count(cur->val)&&(!cur->next||!record.count(cur->next->val)))
res++;
cur=cur->next;
}
return res;
}
};