今日の話題LeetCodeは146タイトルを磨くで、タイトルは(最低使用)LRUキャッシュメカニズムを実装し、データへのアクセスをサポートし、データを書き込むために必要なGET、PUT
データ(キー)ゲット:キーがキャッシュに存在する場合、取得それ以外の場合は-1、キー値を対応
つけたデータを書き込む(キー、値):キーが存在しない場合は、データが書き込まれます。キャッシュサイズは、時間の上限に達すると、
このように、新しいデータ値最低使用データを書き込む新しいデータ値の余地残し間に除去されなければならない
、このソリューションのあなたは、リストを使用することができ、配列を使用することができ、非常に豊かなトピックです。私は、ここで使用される次のように溶液の配列は、特異的にコードがあります。
輸入java.time.temporal.ValueRange。 輸入java.util.HashMapを; 輸入java.util.Map; パブリック クラスLRUCache_146_middle { プライベート int型の容量; プライベート int型の数。 プライベート int型[] KEY。 プライベート int型[] VALUE。 公共 LRUCache_146_middle(int型の容量){ この .capacity = 容量。 この .count = 0; // 记录当前存储的数据个数 この .KEY = 新しい int型[容量]。 この.VALUE = 新しい int型[容量]。 } 公共 INTは(取得INT キー){ 場合(== 0をカウント){ 戻り -1 。 } int型の結果= -1 。 以下のために(int型 i = 0; iは数<; iは++ ){ 場合(KEY [I] == キー){ 結果 = VALUE [I]。 VALUE = 移動(VALUE、カウント、I)。 KEY = 移動(KEY、カウント、I); 休憩 ; } } のSystem.out.println(結果)。 戻り値の結果; } 公共 ボイド PUT(INTキー、int型の値){ 場合(のcontainsKey(KEY、カウント、キー)[0] == 1 ){ int型のインデックス=のcontainsKey(KEY、カウント、キー)[1 ]。 VALUE [インデックス] = 値。 VALUE = 移動(VALUE、カウント、インデックス) KEY = 移動(KEY、カウント、インデックス); } それ以外の 場合(==カウント{容量) // 保存的数据满了 について( int型I = 0; I <カウント-1を、I ++ ){ KEY [I] = KEY [I + 1 ]。 VALUE [I] = VALUE [I + 1 ]。 } KEY [カウント -1] = キー。 VALUE [カウント -1] = 値。 } 他{ VALUE [カウント] = 値。 KEY [回数] = キー。 カウント ++ ; } } パブリック 静的 INT []のcontainsKey(INT []キー、int型の数、INTキー){ int型 []結果= 新しい INT [2 ]。 以下のために(int型 i = 0; iは数<; iは++ ){ 場合(KEY [I] == キー){ 結果[ 0] = 1 ; 結果[ 1] = I。 破ります; } } 戻り値の結果; } パブリック 静的 INT []移動(INT [] NUMS、int型のカウントは、int型I){ int型の TEMP = NUMS [I]。 用(INT ; jは<カウント-1; J ++ J = I ){ NUMS [J] = NUMS [J + 1 ]。 } NUMS [カウント -1] = TEMP。 リターンNUMS。 } パブリック 静的 ボイドメイン(文字列[]引数){ 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 )。 } }