Swift - LeetCode - 链表组件

作者: 依赖糊涂 | 来源:发表于2019-03-14 18:13 被阅读4次

题目

链表组件

问题:

给定一个链表(链表结点包含一个整型值)的头结点 head。同时给定列表 G,该列表是上述链表中整型值的一个子集。返回列表 G 中组件的个数,这里对组件的定义为:链表中一段最长连续结点的值(该值必须在列表 G 中)构成的集合。

说明:

应当保持奇数节点和偶数节点的相对顺序。
链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。

示例:

示例 1:

head: 0->1->2->3     
G = [0, 1, 3]
输出: 2

解释:
链表中,0 和 1 是相连接的,且 G 中不包含 2,所以 [0, 1] 是 G 的一个组件,同理 [3] 也是一个组件,故返回 2。

示例 2:

输入:
head: 0->1->2->3->4
G = [0, 3, 1, 4]
输出: 2
 
解释:
 链表中,0 和 1 是相连接的,3 和 4 是相连接的,所以 [0, 1] 和 [3, 4] 是两个组件,故返回 2。

解题思路:

用指针p表示当前链表结点,p一开始为head头结点,我们从G中挨个遍历,如果能找到,说明p的val在G中存在,这时,把p后移一个,即p=p->next,再在G(从G[0]到G[n-1])中找p的值,如果找到,同样进香行操作,直到在中找不到p->val为止。此时,组件的个数加1。

代码:
/**
public class SingNode {
    public var value : Int
    public var nextNode: SingNode?
    
    public init(value:Int) {
        self.value = value
    }
}

extension SingNode : CustomStringConvertible {
    public var description: String {
        var string = "\(value)"
        var node = self.nextNode
        
        while node != nil {
            string = string + " -- " + "\(node!.value)"
            node = node?.nextNode
        }
        return string
    }
}
 **/
      
 func numComponents(_ l1:SingNode?,_ intArr:[Int]?) -> Int {
        if l1 == nil || intArr == nil {
            return 0
        }
        
        var number = 0
        var head = l1
        var t = 0
        while head != nil {
            if(intArr!.contains(head!.value)) {
                t += 1
                if head?.nextNode == nil {
                    number = number + 1
                }
                
            } else {
                if t > 0 {
                    number = number + 1
                }
                t = 0
            }
            head = head?.nextNode
        }
        return number
    }
    

相关文章

  • Swift - LeetCode - 链表组件

    题目 链表组件 问题: 给定一个链表(链表结点包含一个整型值)的头结点 head。同时给定列表 G,该列表是上述链...

  • Leetcode(链表题解)

    Leetcode_206 反转链表 Leetcode_203 删除链表中指定的元素 Leetcode_24 链表元...

  • Swift 回文链表 - LeetCode

    题目: 回文链表 请判断一个链表是否为回文链表。 示例1: 示例2: 进阶你能否用 O(n) 时间复杂度和 O(...

  • Swift 反转链表 - LeetCode

    题目: 反转链表 反转一个单链表。示例: 进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 方案一...

  • Swift 环形链表- LeetCode

    题目: 环形链表 给定一个链表,判断链表中是否有环。 进阶你能否不使用额外空间解决此题? 方案: 可以转化为一个...

  • Swift - LeetCode - 反转链表

    题目 反转一个单链表。 示例: 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 方案一: 迭代:...

  • Swift - LeetCode - 重排链表

    题目 重排链表 问题: 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L...

  • Swift - LeetCode - 分隔链表

    题目 分隔链表 问题: 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x ...

  • Swift - LeetCode - 翻转链表

    题目 翻转链表 问题: 翻转链表中第m个节点到第n个节点的部分 说明: m,n满足1 ≤ m ≤ n ≤ 链表长度...

  • Swift - LeetCode - 旋转链表

    题目 旋转链表 问题: 给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。 示例: 代码:

网友评论

    本文标题:Swift - LeetCode - 链表组件

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