【Lintcode】LRU Cache, Data Stream Median
하 나 는 내 장 된 형식 우선 대기 열 입 니 다. 작은 루트 더 미 를 어떻게 설정 합 니까?
사용자 정의 데이터 구조 라면, 두 가지 방법 이 있다.
1. 이러한 데이터 구조의 비교 기 호 를 정의 하면 내 장 된 유형 으로 정리 할 수 있다.
2. 다시 불 러 오기 () 클래스 를 입력 합 니 다. 번호 보다 작 을 때 기본 값 은 큰 루트 입 니 다. 들 어 가 는 것 이 callable object 일 수도 있 습 니 다. 함수 가 안 될 것 같 습 니 다. 모 르 겠 습 니 다. 모 르 겠 습 니 다. 모 르 겠 습 니 다. 모 르 겠 습 니 다. 모 르 겠 습 니 다.
LRU Cache
class LRUCache{
public:
// @param capacity, an integer
int Time;
typedef int key;
typedef int time;
typedef int value;
typedef pair<key,time> ktpair;
struct cmp
{
bool operator()(ktpair x1,ktpair x2)
{
return x1.second > x2.second;
}
};
map<key,value> kv;
map<key,time> kt;
priority_queue<ktpair,vector<ktpair>,cmp> q;
int Cap;
LRUCache(int capacity) {
// write your code here
Time = 0;
Cap = capacity;
}
void insert(int key,int value,int time)
{
kv[key] = value;
kt[key] = time;
q.push(make_pair(key,time));
}
// @return an integer
int get(int key) {
// write your code here
Time++;
value ret;
if (kv.find(key) != kv.end())
{
int value = kv[key];
insert(key,value,Time);
return value;
}
else return -1;
}
// @param key, an integer
// @param value, an integer
// @return nothing
void set(int key, int value) {
// write your code here
Time++;
if (kv.find(key) == kv.end())
{
insert(key,value,Time);
if (!Cap)
{
for(;;)
{
auto x = q.top();
auto ckey = x.first;
auto ctime = x.second;
q.pop();
if (kt.find(ckey) == kt.end() || kt[ckey] != ctime) continue;
else
{
kv.erase(ckey);
kt.erase(ckey);
break;
}
}
}
else Cap--;
}
else insert(key,value,Time);
}
};
Data Stream Median
class Solution {
public:
/**
* @param nums: A list of integers.
* @return: The median of numbers
*/
vector<int> medianII(vector<int> &nums) {
// write your code here
priority_queue<int,vector<int>,less<int>> q1;
priority_queue<int,vector<int>,greater<int>> q2;
vector<int> ret;
q1.push(INT_MIN);
q2.push(INT_MAX);
for (auto x : nums)
{
if (x < q2.top()) q1.push(x);
else q2.push(x);
if (q1.size() < q2.size())
{
q1.push(q2.top());
q2.pop();
}
if (q1.size() > 1 + q2.size())
{
q2.push(q1.top());
q1.pop();
}
ret.push_back(q1.top());
}
return ret;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.