zoukankan      html  css  js  c++  java
  • 146. LRU Cache ( Least Recently Used)

    import kotlin.collections.HashMap
    
    /**
     * 146. LRU Cache
     * https://leetcode.com/problems/lru-cache/description/
     *
     * 我们需要设计:
     * 1:使用HashMap:用于存储现有的key,value就是指向双向链表的节点
     * 2:双向链表:在移除尾部元素、添加元素到头部、移动元素到头部都可以在O(1)完成
    *
    */ class Node(key: Int, value: Int) { var key = 0 var value = 0 var next: Node? = null var prev: Node? = null init { this.key = key this.value = value } } class LRUCache(capacity: Int) { var head: Node? = null var tail: Node? = null var capacity = 0 val map = HashMap<Int, Node>(capacity) init { this.capacity = capacity } fun get(key: Int): Int { val n = map.get(key) if (n == null) { return -1 } removeNode(n) //add node to tail addNode(n) return n.value } fun put(key: Int, value: Int) { if (map.containsKey(key)) { val node = map.get(key) node?.value = value removeNode(node!!) addNode(node) } else { if (map.size >= capacity) { if (head != null) { map.remove(head?.key)//delete head here, because i add new node at the tail removeNode(head!!) } } val newNode = Node(key, value) addNode(newNode) map.put(key, newNode) } } private fun removeNode(node: Node) { if (node.prev != null) { node.prev?.next = node.next } else { head = node.next } if (node.next != null) { node.next?.prev = node.prev } else { tail = node.prev } } private fun addNode(node: Node) { if (tail != null) { tail?.next = node } node.prev = tail node.next = null tail = node if (head == null) { head = tail } } } /** * Your LRUCache object will be instantiated and called as such: * var obj = LRUCache(capacity) * var param_1 = obj.get(key) * obj.put(key,value) */
  • 相关阅读:
    scala 获取当前时间的两种方式
    log4j配置输出日志文件
    scala读取jar包外配置文件的方式
    scala 异常处理机制
    IDEA 安装scala插件
    第2部分 Elasticsearch查询-请求体查询、排序
    第1部分 Elasticsearch基础
    2.css
    1.html
    Linux搭建Nexus仓库+高可用方案
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/12383568.html
Copyright © 2011-2022 走看看