Leetcode 30 천도위, Week 2 Day 3, Min Stack, in Swift
제목
사유
간도 stack유형적 實作,直覺是想到用 linked list
유대 동시 수요추적 최소值、所以在 node 的基本實作中就加上一個 minValue 屬性.
용 Linked List 實作部分 Stack ADT
Linked List 實作
Stack 유토개 기본 특성:
因此在串 linked list 的時候, 新的值 혹은 說是 node 必須放出最前面而不是 最後面. 인위 單向鏈結 (singly linked list)적 특성, 是無法回溯前一個 node . 부과반연가가이 實作雙向鏈結只是不想把解法弄的那麼複雜.
추월 최소 值
於題題目期望每一個 method 的動作都是 constant time (O(1)) , 白話說就是在 집행적 시후희망 你不要動用到任何 loop .
인此,在每一次 push 적시후, 취수요 비교 신적 值和最小值, 並紀錄下來比較出來的最新最小值.而這樣子 做會有兩個好處.
top()
자료 상당한 부분, 원처 유상도 금방 외 1개 진열 추추 최소 值, 但是這樣子 수요 另外 1개 變數來追い, 放兩邊管就易會產生 問題, 因此把它 병입 Node.這樣就可以讓
peek()
也可以享受到像是 getMin()
一樣的好處.절묘한 과실
이원시적 인위 沒有變更的 가능성, 所以這邊就全部宣告為
top()
class Node<ValueType> {
let value: ValueType
let minValue: ValueType
var next: Node<ValueType>?
init(_ value: ValueType, _ minValue: ValueType) {
self.value = value
self.minValue = minValue
}
}
완정 적정식 碼
class MinStack {
private var topNode: Node<Int>?
init() {}
func push(_ x: Int) {
let node = Node<Int>(x, min(x, topNode?.minValue ?? Int.max))
node.next = topNode
topNode = node
}
func pop() {
topNode = topNode?.next
}
func top() -> Int {
return topNode?.value ?? 0
}
func getMin() -> Int {
return topNode?.minValue ?? Int.max
}
class Node<ValueType> {
let value: ValueType
let minValue: ValueType
var next: Node<ValueType>?
init(_ value: ValueType, _ minValue: ValueType) {
self.value = value
self.minValue = minValue
}
}
}
복도 분석
결과
Runtime: 96 ms (94.4%)
Memory Usage: 22.9 MB
포유
유대 stack 가위 하늘, 소이트 getMin() 和 top() 的回傳型別應 要要 Optional Int
Reference
이 문제에 관하여(Leetcode 30 천도위, Week 2 Day 3, Min Stack, in Swift), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/vc7/items/83c25d5e2f36b20165a6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)