오늘의 주제는 제목이 LRU (적어도 최근에 사용) 캐시 메커니즘 및 데이터에 대한 액세스를 지원을 구현하고 데이터를 얻을 넣어 쓸 필요하며, LeetCode 146 제목 브러시입니다
데이터를 얻을 수 (키) : 키가 캐시에 존재하는 경우, 취득 그렇지 않으면 -1, 키 값과 대응
넣어 기록 데이터 (키 값) : 키가 존재하지 않으면, 데이터가 기입된다. 캐시 크기가 시간의 상한에 도달하면,
따라서, 새로운 데이터 값 가장 최근에 사용 된 데이터를 쓰는 새로운 데이터 값의 여지 남겨 사이에서 제거해야
이 솔루션은 또한 목록을 사용할 수있는 배열을 사용할 수있는 매우 다양한 주제입니다. 여기 사용 된 다음 용액의 배열, 즉 코드이다 :
수입 java.time.temporal.ValueRange; 수입 java.util.HashMap에; 수입 java.util.Map; 공공 클래스 LRUCache_146_middle { 개인 INT의 능력; 개인 INT의 수; 개인 INT [] KEY; 개인 INT [η]; 공개 LRUCache_146_middle ( INT의 용량) { 이 .capacity = 용량; 이 .count = 0; // 记录当前存储的数据个数 이 .KEY = 새로운 INT [용량]; 이.VALUE = 새로운 INT [용량]; } 공개 INT의 GET ( INT의 키) { 경우 (== 0 카운트 ) { 반환 -1 ; } INT의 결과 = -1 ; 위한 ( int로 I = 0; I <카운트, 내가 ++ ) { 경우 (KEY [I] == 키) { 결과 = VALUE [I]; VALUE = 이동 (VALUE는 I를 계산); KEY = 이동 (KEY, 나에게, 카운트); 휴식 ; } } 에서 System.out.println (결과); 반환 결과를; } 공공 공극 넣어 ( INT의 키 INT의 값) { 경우 (containskey는 (키) [0] == 1 키 카운트 ) { INT의 인덱스 = containskey (KEY, 키 카운트) [1 ]; VALUE [인덱스] = 값; VALUE = 이동 (값이 인덱스 계산); KEY = 이동 (KEY는, 인덱스 카운트); } 다른 경우 (계산 == {용량) // 保存的数据满了 위한( INT난 = 0; 난 카운트 <1; I ++ ) { KEY [I] = KEY [I + 1 ]; VALUE [I] = VALUE [I + 1 ]; } KEY는 [카운트 -1] = 키; 값 [카운트 -1] = 값; } 다른 { VALUE [카운트] = 값; KEY [카운트] = 키; 카운트 ++ ; } } 공용 정적 INT [] containskey ( INT [] KEY, INT의 카운트 INT키) { int로 [] = 결과 새로운 INT [2 ]; 위한 ( int로 I = 0; I <카운트, 내가 ++ ) { 경우 (KEY [I] == 키) { 결과 [ 0] = 1 ; 따라서 [ 1] = I; 휴식 ; } } 리턴 결과; } 공용 정적 INT [] 이동 ( INT [] nums, INT의 카운트, int로 I) { INT의 온도 = nums [I]; 대 ( INT의 J = I, J <카운트-1; J를 ++ ) { nums [J]가 nums를 = J + 1 ]; } nums [카운트 -1] = 온도; 반환 nums을; } 공공 정적 무효 메인 (문자열 []에 args) { LRUCache_146_middle의 LRU = 새로운 LRUCache_146_middle (2 ); lru.put ( 2,1 ); lru.put ( 2,2 ); lru.get ( 2 ); lru.put ( 1,1 ); lru.put ( 4,1 ); lru.get (2 ); } }