在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Design your implementation of the circular double-ended queue (deque). Your implementation should support following operations:
Example: MyCircularDeque circularDeque = new MycircularDeque(3); // set the size to be 3 circularDeque.insertLast(1); // return true circularDeque.insertLast(2); // return true circularDeque.insertFront(3); // return true circularDeque.insertFront(4); // return false, the queue is full circularDeque.getRear(); // return 2 circularDeque.isFull(); // return true circularDeque.deleteLast(); // return true circularDeque.insertFront(4); // return true circularDeque.getFront(); // return 4 Note:
设计实现双端队列。
示例: MyCircularDeque circularDeque = new MycircularDeque(3); // 设置容量大小为3 circularDeque.insertLast(1); // 返回 true circularDeque.insertLast(2); // 返回 true circularDeque.insertFront(3); // 返回 true circularDeque.insertFront(4); // 已经满了,返回 false circularDeque.getRear(); // 返回 2 circularDeque.isFull(); // 返回 true circularDeque.deleteLast(); // 返回 true circularDeque.insertFront(4); // 返回 true circularDeque.getFront(); // 返回 4 提示:
Runtime: 136 ms
Memory Usage: 20.5 MB
1 class MyCircularDeque { 2 var data:[Int] 3 var size:Int 4 5 /** Initialize your data structure here. Set the size of the deque to be k. */ 6 init(_ k: Int) { 7 data = [Int]() 8 size = k 9 } 10 11 /** Adds an item at the front of Deque. Return true if the operation is successful. */ 12 func insertFront(_ value: Int) -> Bool { 13 if isFull() {return false} 14 data.insert(value,at:0) 15 return true 16 } 17 18 /** Adds an item at the rear of Deque. Return true if the operation is successful. */ 19 func insertLast(_ value: Int) -> Bool { 20 if isFull() {return false} 21 data.append(value) 22 return true 23 } 24 25 /** Deletes an item from the front of Deque. Return true if the operation is successful. */ 26 func deleteFront() -> Bool { 27 if isEmpty() {return false} 28 data.removeFirst() 29 return true 30 } 31 32 /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ 33 func deleteLast() -> Bool { 34 if isEmpty() {return false} 35 data.popLast() 36 return true 37 } 38 39 /** Get the front item from the deque. */ 40 func getFront() -> Int { 41 if isEmpty() {return -1} 42 return data.first! 43 44 } 45 46 /** Get the last item from the deque. */ 47 func getRear() -> Int { 48 if isEmpty() {return -1} 49 return data.last! 50 } 51 52 /** Checks whether the circular deque is empty or not. */ 53 func isEmpty() -> Bool { 54 return data.isEmpty 55 } 56 57 /** Checks whether the circular deque is full or not. */ 58 func isFull() -> Bool { 59 return data.count >= size 60 } 61 } 62 63 /** 64 * Your MyCircularDeque object will be instantiated and called as such: 65 * let obj = MyCircularDeque(k) 66 * let ret_1: Bool = obj.insertFront(value) 67 * let ret_2: Bool = obj.insertLast(value) 68 * let ret_3: Bool = obj.deleteFront() 69 * let ret_4: Bool = obj.deleteLast() 70 * let ret_5: Int = obj.getFront() 71 * let ret_6: Int = obj.getRear() 72 * let ret_7: Bool = obj.isEmpty() 73 * let ret_8: Bool = obj.isFull() 74 */ 156ms 1 class MyCircularDeque: CustomStringConvertible { 2 3 var capacity: Int { 4 return deque.count 5 } 6 7 var description: String { 8 return deque.description 9 } 10 11 private var deque: [Int] 12 13 private var frontIndex: Int? 14 private var rearIndex: Int? 15 16 /** Initialize your data structure here. Set the size of the deque to be k. */ 17 init(_ k: Int) { 18 self.deque = [Int].init(repeating: 0, count: k) 19 } 20 21 /** Adds an item at the front of Deque. Return true if the operation is successful. */ 22 func insertFront(_ value: Int) -> Bool { 23 guard isFull() == false else { 24 return false 25 } 26 27 if var front = self.frontIndex { 28 front = shiftBackwards(front) 29 self.frontIndex = front 30 deque[front] = value 31 32 } else { 33 self.frontIndex = 0 34 self.rearIndex = 0 35 deque[0] = value 36 } 37 38 return true 39 } 40 41 /** Adds an item at the rear of Deque. Return true if the operation is successful. */ 42 func insertLast(_ value: Int) -> Bool { 43 guard isFull() == false else { 44 return false 45 } 46 47 if var rear = self.rearIndex { 48 rear = shiftForwards(rear) 49 self.rearIndex = rear 50 deque[rear] = value 51 52 } else { 53 self.frontIndex = 0 54 self.rearIndex = 0 55 deque[0] = value 56 } 57 58 return true 59 } 60 61 /** Deletes an item from the front of Deque. Return true if the operation is successful. */ 62 func deleteFront() -> Bool { 63 guard isEmpty() == false else { 64 return false 65 } 66 67 guard let front = self.frontIndex else { 68 fatalError("front must be valid in a non empty deque") 69 } 70 71 if front == self.rearIndex { 72 self.frontIndex = nil 73 self.rearIndex = nil 74 } else { 75 self.frontIndex = shiftForwards(front) 76 } 77 78 return true 79 } 80 81 /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ 82 func deleteLast() -> Bool { 83 guard isEmpty() == false else { 84 return false 85 } 86 87 guard let rear = self.rearIndex else { 88 fatalError("rear must be valid in a non empty deque") 89 } 90 91 if rear == self.frontIndex { 92 self.frontIndex = nil 93 self.rearIndex = nil 94 } else { 95 self.rearIndex = shiftBackwards(rear) 96 } 97 98 return true 99 } 100 101 /** Get the front item from the deque. */ 102 func getFront() -> Int { 103 guard let front = self.frontIndex else { 104 return -1 105 } 106 107 return self.deque[front] 108 } 109 110 /** Get the last item from the deque. */ 111 func getRear() -> Int { 112 guard let rear = self.rearIndex else { 113 return -1 114 } 115 116 return self.deque[rear] 117 } 118 119 /** Checks whether the circular deque is empty or not. */ 120 func isEmpty() -> Bool { 121 return self.frontIndex == nil && self.rearIndex == nil 122 } 123 124 /** Checks whether the circular deque is full or not. */ 125 func isFull() -> Bool { 126 if let front = self.frontIndex, let rear = self.rearIndex { 127 128 if rear < front, front == shiftForwards(rear) { 129 return true 130 } 131 132 if rear > front, front == 0, rear == self.capacity - 1 { 133 return true 134 } 135 } 136 137 return false 138 } 139 140 private func shiftForwards(_ i: Int) -> Int { 141 var index = i + 1 142 if index == capacity { 143 index = 0 144 } 145 146 return index 147 } 148 149 private func shiftBackwards(_ i: Int) -> Int { 150 var index = i - 1 151 if index == -1 { 152 index = capacity - 1 153 } 154 155 return index 156 } 157 } 160ms 1 class MyCircularDeque { 2 private class Node { 3 public var prev: Node? 4 public var next: Node? 5 public var val: Int 6 7 init(_ val: Int) { 8 self.val = val 9 } 10 } 11 12 private var head: Node? 13 private var tail: Node? 14 private var maxSize: Int 15 private var size: Int 16 17 /** Initialize your data structure here. Set the size of the deque to be k. */ 18 init(_ k: Int) { 19 self.maxSize = k 20 self.size = 0 21 } 22 23 /** Adds an item at the front of Deque. Return true if the operation is successful. */ 24 func insertFront(_ value: Int) -> Bool { 25 guard self.size < self.maxSize else { 26 return false 27 } 28 29 let node = Node(value) 30 node.prev = self.head 31 self.head?.next = node 32 self.head = node 33 if size == 0 { 34 self.tail = node 35 } 36 self.size += 1 37 38 return true 39 } 40 41 /** Adds an item at the rear of Deque. Return true if the operation is successful. */ 42 func insertLast(_ value: Int) -> Bool { 43 guard self.size < self.maxSize else { 44 return false 45 } 46 47 let node = Node(value) 48 node.next = self.tail 49 self.tail?.prev = node 50 self.tail = node 51 if size == 0 { 52 self.head = node 53 } 54 self.size += 1 55 56 return true 57 } 58 59 /** Deletes an item from the front of Deque. Return true if the operation is successful. */ 60 func deleteFront() -> Bool { 61 guard self.size > 0 else { 62 return false 63 } 64 65 self.head = self.head?.prev 66 self.head?.next = nil 67 self.size -= 1 68 if self.size == 0 { 69 self.head = nil 70 self.tail = nil 71 } 72 73 return true 74 } 75 76 /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ 77 func deleteLast() -> Bool { 78 guard self.size > 0 else { 79 return false 80 } 81 82 self.tail = self.tail?.next 83 self.tail?.prev = nil 84 self.size -= 1 85 if self.size == 0 { 86 self.head = nil 87 self.tail = nil 88 } 89 90 return true 91 92 } 93 94 /** Get the front item from the deque. */ 95 func getFront() -> Int { 96 return self.head?.val ?? -1 97 } 98 99 /** Get the last item from the deque. */ 100 func getRear() -> Int { 101 return self.tail?.val ?? -1 102 } 103 104 /** Checks whether the circular deque is empty or not. */ 105 func isEmpty() -> Bool { 106 return self.size == 0 107 } 108 109 /** Checks whether the circular deque is full or not. */ 110 func isFull() -> Bool { 111 return self.size == self.maxSize 112 } 113 114 func getList() -> [Int] { 115 var l: [Int] = [] 116 117 var node = self.head 118 while node != nil { 119 l.append(node!.val) 120 node = node!.prev 121 } 122 123 return l 124 } 125 } 196ms 1 class MyCircularDeque { 2 3 private var array = [Int]() 4 private var maxSize = 0 5 /** Initialize your data structure here. Set the size of the deque to be k. */ 6 init(_ k: Int) { 7 maxSize = k 8 } 9 10 /** Adds an item at the front of Deque. Return true if the operation is successful. */ 11 func insertFront(_ value: Int) -> Bool { 12 guard array.count < maxSize else { 13 return false 14 } 15 16 array.insert(value, at: 0) 17 return true 18 } 19 20 /** Adds an item at the rear of Deque. Return true if the operation is successful. */ 21 func insertLast(_ value: Int) -> Bool { 22 guard array.count < maxSize else { 23 return false 24 } 25 array.append(value) 26 return true 27 } 28 29 /** Deletes an item from the front of Deque. Return true if the operation is successful. */ 30 func deleteFront() -> Bool { 31 guard array.count >= 1 else { 32 return false 33 } 34 35 array.remove(at: 0) 36 return true 37 } 38 39 /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ 40 func deleteLast() -> Bool { 41 guard array.count >= 1 else { 42 return false 43 } 44 45 array.removeLast() 46 return true 47 } 48 49 /** Get the front item from the deque. */ 50 func getFront() -> Int { 51 guard let first = array.first else { 52 return -1 53 } 54 55 return first 56 } 57 58 /** Get the last item from the deque. */ 59 func getRear() -> Int { 60 guard let last = array.last else { 61 return -1 62 } 63 64 return last 65 全部评论
专题导读
上一篇:swiftbug调试记(wsgi.input)发布时间:2022-07-13下一篇:[Swift]LeetCode843.猜猜这个单词|GuesstheWord发布时间:2022-07-13热门推荐
热门话题
阅读排行榜
|
请发表评论