博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode LRUCache题目
阅读量:4653 次
发布时间:2019-06-09

本文共 2564 字,大约阅读时间需要 8 分钟。

package com.jackiesteed.leetcode;    import java.util.*;    /**   * Created by jackie on 4/23/15.  */   public class LRUCache {    private int capacity;    private Map
map = new HashMap
(); private Ele head = null; private Ele tail = null; public LRUCache(int capacity) { this.capacity = capacity; } public void set(int key, int value) { if(map.containsKey(key)){ Ele e = map.get(key); if(head != e){ unlink(e); add2Head(e); } e.value = value; return; } if(map.size() >= capacity){ Ele e = tail; map.remove(e.key); e.value = value; e.key = key; map.put(key, e); unlink(e); add2Head(e); return; } Ele e = new Ele(); e.key = key; e.value = value; e.pre = null; e.next = null; if(head == null || tail == null){ head = e; tail = e; }else{ add2Head(e); } map.put(key, e); } private void add2Head(Ele e){ e.pre = null; e.next = head; head.pre = e; head = e; } public int get(int key) { if (map.containsKey(key)) { Ele e = map.get(key); if(head != e){ unlink(e); add2Head(e); } return map.get(key).value; } return -1; } private void unlink(Ele e){ if(e.pre != null) e.pre.next = e.next; if(e.next != null) e.next.pre = e.pre; if(tail == e) tail = e.pre; if(tail == null) tail = head; } static class Ele { private int value; private int key; private Ele next; private Ele pre; } public void print(){ Ele e = head; while(true){ if(e == null) break; System.out.print("(" + e.key + "," + e.value + "),"); e = e.next; } System.out.println(""); } public static void main(String[] args) { LRUCache cache = new LRUCache(3); cache.set(1,1); cache.set(2, 2); cache.set(3,3); cache.set(4,4); cache.print(); cache.get(4); cache.get(3); cache.get(2); cache.get(1); cache.print(); } }

 

posted on
2015-04-24 23:15  阅读(
...) 评论(
...) 收藏

转载于:https://www.cnblogs.com/jackiesteed/articles/4454906.html

你可能感兴趣的文章
面向对象(上)
查看>>
EFCodeFirst安装失败 解决规划
查看>>
各种域名解析的区别
查看>>
centos6.4搭建apache+mysql+php环境 ...
查看>>
Linux下安装和运行Wireshark
查看>>
python iter()的使用 迭代器 生成器的使用
查看>>
八数码块
查看>>
课后作业4
查看>>
VS11将拥有更好的单元测试工具和Fakes框架
查看>>
Linux Kernel 3.8.1 发布
查看>>
MFC程序出现“Debug Assertion Failed! File:dlgdata.cpp Line: 43 ”错误
查看>>
【并发】2、AtomicReferenceFieldUpdater初体验
查看>>
NOIP幂次方
查看>>
liferay MVCActionCommand的用法及例子
查看>>
用OpenGL实现跳跃的立体小球
查看>>
解析XML文件
查看>>
安装配置GitLab
查看>>
使用 Nuget安装DLL
查看>>
18 Surprises From Reading jQuery’s Source Code
查看>>
004 方法反射
查看>>