Swift - LeetCode - 鏈表組件

題目

鏈表組件

問(wèn)題:

給定一個(gè)鏈表(鏈表結(jié)點(diǎn)包含一個(gè)整型值)的頭結(jié)點(diǎn) head。同時(shí)給定列表 G,該列表是上述鏈表中整型值的一個(gè)子集。返回列表 G 中組件的個(gè)數(shù),這里對(duì)組件的定義為:鏈表中一段最長(zhǎng)連續(xù)結(jié)點(diǎn)的值(該值必須在列表 G 中)構(gòu)成的集合。

說(shuō)明:

應(yīng)當(dāng)保持奇數(shù)節(jié)點(diǎn)和偶數(shù)節(jié)點(diǎn)的相對(duì)順序。
鏈表的第一個(gè)節(jié)點(diǎn)視為奇數(shù)節(jié)點(diǎn),第二個(gè)節(jié)點(diǎn)視為偶數(shù)節(jié)點(diǎn),以此類推。

示例:

示例 1:

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

解釋:
鏈表中,0 和 1 是相連接的,且 G 中不包含 2,所以 [0, 1] 是 G 的一個(gè)組件,同理 [3] 也是一個(gè)組件,故返回 2。

示例 2:

輸入:
head: 0->1->2->3->4
G = [0, 3, 1, 4]
輸出: 2
 
解釋:
 鏈表中,0 和 1 是相連接的,3 和 4 是相連接的,所以 [0, 1] 和 [3, 4] 是兩個(gè)組件,故返回 2。

解題思路:

用指針p表示當(dāng)前鏈表結(jié)點(diǎn),p一開始為head頭結(jié)點(diǎn),我們從G中挨個(gè)遍歷,如果能找到,說(shuō)明p的val在G中存在,這時(shí),把p后移一個(gè),即p=p->next,再在G(從G[0]到G[n-1])中找p的值,如果找到,同樣進(jìn)香行操作,直到在中找不到p->val為止。此時(shí),組件的個(gè)數(shù)加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
    }
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容