寻找链表连续的段数,连续的定义是,这一段的数字都在数组中出现即记为连续的段。本题中数组中的数字和链表中的数组都是不重复的,还简单些,引入哈希表,使查找的复杂度变为O(1)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
int numComponents(ListNode* head, vector<int>& nums) {
ListNode* trans = head;
bool judge = false;
int ans = 0;
unordered_set<int> set;
for(int d : nums) set.insert(d);
while(nullptr != trans){
if(set.find(trans->val) != set.end()){
if(!judge) judge = true;
}else{
if(judge){
ans++;
judge = false;
}
}
trans = trans->next;
}
if(judge) ans++;
return ans;
}
};