zoukankan      html  css  js  c++  java
  • Leetcode 146

    我写的代码依然比较丑陋,只需要记住实现以下东西:

    >>> 链表节点 struct Node{...},包含 int key, int value, Node* next, Node *pred。

    >>> 双向链表 Node *head, *tail,链表的描述信息 int size, int capacity

    >>> 哈希表 map<int, Node*> hashTable

    为了保证代码整洁,我实现了两个方法:Node* addToTail(int k, int v) 和 void moveToTail(Node* node)。

    接下来的策略:

    >>> 如果是 get,那么检查 hashTable 中是否有key(auto iter = hashTable.find(key); iter == hashTable.end()?),有则moveToTail(iter->second); return tail->val,否则 return -1。

    >>> 如果是 put,那么在链表 size < capacity 时,直接 auto node = addToTail(key, value); hashTable[key] = node。不然,则看 key 是否在 hashTable 中。

    >>>>>> 如果是,直接 moveToTail 并更新值。

    >>>>>> 否则,moveToTail(head) 并更新 head 的内容,再更新 hashTable 中的内容。

    Node* addToTail(int k, int v) 

  • 相关阅读:
    java之内部类与匿名内部类
    学习Android之内部类
    Android横竖屏切换总结
    java实现快速排序
    Palindrome Partitioning II
    Palindrome Partitioning
    Clone Graph
    Word Break
    Gas Station
    Candy
  • 原文地址:https://www.cnblogs.com/KakagouLT/p/13691627.html
Copyright © 2011-2022 走看看