leetcode 브러시 (15) 제목

오늘의 주제는 제목이 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 ); 
    } 
}

 

추천

출처www.cnblogs.com/cquer-xjtuer-lys/p/11404012.html