LeetCode #146:LRU Cache(实现 LRU 缓存)

题目描述

考研 OS 和计组的高频考点,当初只会纸上做题手算替换页面和 Cache,现在需要手撸代码了。由于要求 get() 和 put() 函数在 O(1) 的复杂度执行,采用 Hashmap 映射双链表结点的方法,写到一半迭代器的用法忘了还去搜了半天【cai

阅读全文

LeetCode #206:Reverse Linked List(反转单链表)

题目描述

学过链表的应该都会写,但是这个题有个坑就是链表的头结点是存放数据的,这与大部分数据结构教材不同(我以为头结点不存放数据结果死活过不了)。和题解不同的是我手动给它安了一个不存放数据的头结点运用头插法。

阅读全文

浅谈 Swift 中 “面向协议编程” 思想

最近在某个 iOS 开发交流群里看到了一个非常基本、却又很典型的例子:

protocol Eatable {
    func eat()
}

extension Eatable {
    func eat() {
        print("吃东西")
    }
}

struct Person: Eatable {
    func eat() {
        print("吃米饭")
    }
}

let p1: Person = Person()
let p2: Eatable = Person()
p1.eat()
p2.eat()

阅读全文