817. Linked List Components
今天的题目是817. Linked List Components。
非常简单的一道题。。。为什么会出现在Medium
中呢?
把G
数组转成一个unordered_set
就可以快速的判断某个元素是否在G
中了,用一个flag
来标识前一个元素是否在G
中,初始值为false
,然后遍历链表:
- 当前元素在
G
时,flag = true
- 当前元素不在
G
时,如果flag == true
,计数就加一,然后flag = false
。
遍历完链表后,再判断一次flag
是否为真,如果是,则计数加一。
代码如下:
1 | int numComponents(ListNode* head, vector<int>& G) { |
- 时间复杂度为:
O(n+m)
- 空间复杂度为:
O(m)
n
为链表大小,m
为G
的大小
当然如果不用unordered_set
来做也是可以的,因为题目中限制了链表长度和值的范围,而G
中元素都是链表中的元素,所以我们可以用一个长度为 10000 的数组来代替unordered_set
。
代码如下:
1 | int numComponents(ListNode* head, vector<int>& G) { |
- 时间复杂度为:
O(n+m)
- 空间复杂度为:
O(1)
n
为链表大小,m
为G
的大小