

解决思路
遍历链表,查找元素是否在G中,不存在即存在一个断点,结果就是断点数加一。
注意连续的断点只能算一个,最前面和结尾的连续断点无效。
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func numComponents(head *ListNode, G []int) int {
keys := make(map[int]struct{}, len(G))
for _, i := range G {
keys[i] = struct{}{}
}
count := 0
flag := false
for cur := head; cur != nil; cur = cur.Next {
if _, ok := keys[cur.Val]; !ok {
if !flag && cur != head {
count ++
}
// 第一个不存在,count不加,但标志要设置
flag = true
}else {
flag = false
}
}
//结尾那个连续的要删除
if flag {
return count
}
return count + 1
}
网友评论