aaarticlea/png;base64,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" alt="" />
1 package leetcode; import java.util.HashMap;
import java.util.Map; class Node{
int key;
int value;
Node pre;
Node next;
Node(int key,int value){
this.key=key;
this.value=value;
this.pre=null;
this.next=null;
}
}
class CacheList{
private Node head;
private Node tail;
CacheList(int capacity){
head = new Node(0,0);
tail = new Node(0,0);
head.next=tail;
tail.pre=head;
}
public void insertFirst(Node n){
n.next=head.next;
head.next.pre=n;
head.next=n;
n.pre=head; }
public Node removeLast(){
Node re = tail.pre;
tail.pre.pre.next=tail;
tail.pre=tail.pre.pre;
return re;
}
public void shiftToFirst(Node n){
n.pre.next=n.next;
n.next.pre=n.pre;
insertFirst(n);
}
} public class LRUCache {
Map<Integer,Node> map;
CacheList cacheList;
int capacity;
public LRUCache(int capacity) {
map = new HashMap<Integer,Node>();
cacheList= new CacheList(capacity);
this.capacity=capacity;
} public int get(int key) {
if(map.get(key)==null)
return -1;
else {
Node n= (Node) map.get(key);
cacheList.shiftToFirst(n);
return n.value;
}
} public void set(int key, int value) {
if(map.containsKey(key)){
Node come= (Node) map.get(key);
come.value=value;
cacheList.shiftToFirst(come);;
}else{
if(map.size()==capacity){
Node old=cacheList.removeLast();
map.remove(old.key); }
Node nn=new Node(key,value);
cacheList.insertFirst(nn);
map.put(key, nn);
} }
public static void main(String[] args){
LRUCache l = new LRUCache(1);
l.set(2, 1);
System.out.println(l.get(2));
l.set(3, 2);
System.out.println(l.get(2));
System.out.println(l.get(3)); }
}

leetcode--003 LRU cache的更多相关文章

  1. Java for LeetCode 146 LRU Cache 【HARD】

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...

  2. LeetCode之LRU Cache 最近最少使用算法 缓存设计

    设计并实现最近最久未使用(Least Recently Used)缓存. 题目描述: Design and implement a data structure for Least Recently ...

  3. leetcode@ [146] LRU Cache (TreeMap)

    https://leetcode.com/problems/lru-cache/ Design and implement a data structure for Least Recently Us ...

  4. 【LeetCode】LRU Cache 解决报告

    插话:只写了几个连续的博客,博客排名不再是实际"远在千里之外"该.我们已经进入2一万内. 再接再厉.油! Design and implement a data structure ...

  5. [LeetCode] 146. LRU Cache 最近最少使用页面置换缓存器

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...

  6. [LeetCode] 146. LRU Cache 近期最少使用缓存

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...

  7. 【leetcode】LRU Cache

    题目简述: Design and implement a data structure for Least Recently Used (LRU) cache. It should support t ...

  8. 【leetcode】LRU Cache(hard)★

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...

  9. 【Leetcode】 LRU Cache实现

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...

  10. leetcode 146. LRU Cache ----- java

    esign and implement a data structure for Least Recently Used (LRU) cache. It should support the foll ...

随机推荐

  1. 单独谈谈 Android Cursor 的使用细节

    使用过 SQLite 数据库对 Cursor 应该不陌生,这里单独拿出来谈一下,加深对Android SQLite中使用 Cursor 的理解. 在你理解和使用 Android Cursor 的时候你 ...

  2. windows下spark开发环境配置

    http://www.cnblogs.com/davidwang456/p/5032766.html windows下spark开发环境配置 --本篇随笔由同事葛同学提供. windows下spark ...

  3. sublime使用方法

    一.sublime菜单简介[常用功能及快捷键] [Edit菜单] 1.line行操作快捷键 ctrl+] 增加缩进 ctrl+[ 减小缩进 ctrl+shift+D 复制当前行 ctrl+shift+ ...

  4. mysql链接表,connection string, federated engine

    http://database.51cto.com/art/201011/234561.htm

  5. Request 地址栏传值

    request页面 protected void btnSearch_Click(object sender, EventArgs e) { Response.Redirect("Reque ...

  6. List和ArrayList之间转换的例子

    package Test01; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public c ...

  7. multipleOutputs Hadoop

    package org.lukey.hadoop.muloutput; import java.io.IOException; import org.apache.hadoop.conf.Config ...

  8. HDU 2897 邂逅明下(巴什博奕变形)

    巴什博奕的变形,与以往巴什博奕不同的是,这里给出了上界和下界,原先是(1,m),现在是(p,q),但是原理还是一样的,解释如下: 假设先取者为A,后取者为B,初始状态下有石子n个,除最后一次外其他每次 ...

  9. 解决Ubuntu系统中文乱码显示问题,终端打开文件及查看目录

    解决Ubuntu系统中文乱码显示问题 [日期:2014-02-20] 来源:Linux社区  作者:njchenyi [字体:大 中 小]   我是先安装了Ubuntu 12.04 Server,然后 ...

  10. zencart 具体页面调用规则: $body_code变量解析

    zencart $body_code变量解析 修改centerColumn 可以修改中间产品方框的大小 2.2.5 .BODY文件在这个文件生效 require($body_code) include ...