[Swift]Baek Jun 10866-Dex

1629 ワード


質問リンク
インデックスは、両端でデータ構造を挿入および削除できる両端キューです.
実装キューのように実装できますが、最初に通過する最終コードは次のとおりです.

最終コード


import Foundation

let N = Int(readLine()!)!
var deque = [Int]()

for _ in 0..<N {
    let commandLine = readLine()!.split(separator: " ")
    let command = String(commandLine[0])


    if command == "push_front" {
        deque.insert(Int(commandLine[1])!, at: 0)
    } else if command == "push_back" {
        deque.append(Int(commandLine[1])!)
    } else if command == "pop_front" {
        print(deque.isEmpty ? -1 : deque.removeFirst())
    } else if command == "pop_back" {
        print(deque.isEmpty ? -1 : deque.removeLast())
    } else if command == "size" {
        print(deque.count)
    } else if command == "empty" {
        print(deque.isEmpty ? 1 : 0)
    } else if command == "front" {
        print(deque.isEmpty ? -1 : deque[0])
    } else if command == "back" {
        print(deque.isEmpty ? -1 : deque.last!)
    }
}
  • removeLast() vs popLast()
    :両方とも削除して配列の最後の値を返します.
  • Remove Last():Intを返し、配列が空の場合はX=>コンパイルエラー
  • を考慮
  • popLast() : Int? 戻ります.配列が空の場合はnil
  • です.
    =>したがって、配列が空ではないことを知っている場合はremoveLastを使用し、popLast()を使用する場合はpopLast()を使用します.次のように強制的に包装をキャンセルする必要があります.
  • deque[0] vs deque.first!
    :両方とも、前の列の値が表示されます.
  • deque[0]の方が早いです.また、firstはInt?戻りますので、強制吹き付け処理が必要です.