美文网首页
Linked List Components

Linked List Components

作者: 余启涛 | 来源:发表于2019-03-21 23:00 被阅读0次
1.png
2.png

解决思路

遍历链表,查找元素是否在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
}

相关文章

网友评论

      本文标题:Linked List Components

      本文链接:https://www.haomeiwen.com/subject/ihzhvqtx.html