package main import ( "container/list" "fmt" ) type Solution struct { Cap int Dict map[int] *list.Element MyList *list.List } type Pair struct { key,value int } func Construct(capacity int) Solution{ return Solution{ capacity, map[int] *list.Element{}, list.New(), } } func (this * Solution) get(key int) int { if res, ok := this.Dict[key]; ok { this.MyList.MoveToFront(res) return res.Value.(Pair).value } else { return -1 } } func (this * Solution) set(key, value int) { //判断在不在缓存 if res, ok := this.Dict[key]; ok { res.Value = Pair{key,value} // this.MyList.MoveToFront(res) // this.MyList.MoveToFront(res) return } this.Dict[key] = this.MyList.PushFront(Pair{key,value}) if len(this.Dict) > this.Cap { res := this.MyList.Remove(this.MyList.Back()) delete(this.Dict, res.(Pair).key) } } func main() { var cap int fmt.Scan(&cap) solution := Construct(cap) for { var op string // fmt.Println(op) _, err := fmt.Scan(&op) // fmt.Println(op, err) if err != nil { break } var key, value int if op == "p" { fmt.Scan(&key, &value) solution.set(key, value) } else if op == "g"{ fmt.Scan(&key) res := solution.get(key) fmt.Println(res) } // fmt.Println(op, key, value) } }