Leetcode817
1.问题描述
2.解决方案
1.其实思路就是遍历,连续的在nums中出现,就算一个组件,返回组件的数量
2.这里有一个启发就是在一个链表或者数组中,有标识的连续的一块我们称为连通节点,那么本题就是求连通节点连通块的个数
3.求连通块的个数就是,无非在连通块的第一个节点+1,或者连通块的最后一个节点+1
4.本题我采用最后一个节点+1,这时候就要判断,如果是整个链表的最后一个节点,也要+1
class Solution {
public int numComponents(ListNode head, int[] nums) {
//1.hash nums
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0;i<nums.length;i++){
map.put(nums[i], 1);
}
//2.遍历求连通块个数
int cnt = 0;
while(head!=null){
if(map.containsKey(head.val) && (head.next==null || !map.containsKey(head.next.val))) cnt++;
head = head.next;
}
return cnt;
}
}