码迷,mamicode.com
首页 > 系统相关 > 详细

LeetCode 146 LRU Cache

时间:2014-10-22 12:56:02      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:java   leetcode   

Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.

get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
set(key, value) - Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.

思路:HashMap+双链表
class Node {
	Node pre;
	Node next;
	int key;
	int value;

	Node(int k, int val) {
		key = k;
		value = val;
	}
}

public class LRUCache {
	HashMap<Integer, Node> hm;
	Node head, tail;
	int size;

	public LRUCache(int capacity) {
		hm = new HashMap<Integer, Node>();
		head = new Node(-1, -1);
		tail = new Node(0, 0);
		size = capacity;
		head.next = tail;
		tail.pre = head;
	}

	public int get(int key) {
		if (hm.containsKey(key)) {
			Node p = hm.get(key);
			putToHead(p);
			return p.value;
		}
		return -1;
	}

	public void set(int key, int value) {
		if (hm.containsKey(key)) {
			Node p = hm.get(key);
			p.value = value;
			hm.put(key, p);
			putToHead(p);
		} else if (hm.size() < size) {
			Node p = new Node(key, value);
			putToHead(p);
			hm.put(key, p);
		} else {
			Node p = new Node(key, value);
			putToHead(p);
			hm.put(key, p);
			int tmpkey = removeEnd();
			hm.remove(tmpkey);
		}
	}

	private int removeEnd() {
		Node p = tail.pre;
		tail.pre.pre.next = tail;
		tail.pre = p.pre;
		p.pre = null;
		p.next = null;
		return p.key;
	}

	private void putToHead(Node p) {
		if (p.next != null && p.pre != null) {
			p.pre.next = p.next;
			p.next.pre = p.pre;
		}
		p.pre = head;
		p.next = head.next;
		head.next.pre = p;
		head.next = p;
	}
}


LeetCode 146 LRU Cache

标签:java   leetcode   

原文地址:http://blog.csdn.net/mlweixiao/article/details/40374001

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!