攜程今年的機試題為20道選擇+3編程 由於今天最後提交時第三題編程未通過,交卷之後想出來的解法這裡記錄一下。 ...
攜程今年的機試題為20道選擇+3編程
由於今天最後提交時第三題編程未通過,交卷之後想出來的解法這裡記錄一下。
import java.util.ArrayList; import java.util.List; import java.util.Scanner; //攜程3 public class LRU { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int size=Integer.valueOf(sc.nextLine()) ; List<Integer> list1 = new ArrayList<>();//存key List<Integer> list2 = new ArrayList<>();//存value while(sc.hasNext()){ String line =sc.nextLine(); String[] subLine=line.split(" "); if(subLine[0].equals("p")){ if(list1.contains(Integer.valueOf(subLine[1]))){//如果已經存在,只是將value改變 int k=list1.indexOf(Integer.valueOf(subLine[1])); list2.set(k,Integer.valueOf(subLine[2])); }else{//否則放入隊列尾 if(list1.size()>=size){ list1.remove(0); list2.remove(0); } list1.add(Integer.valueOf(subLine[1])); list2.add(Integer.valueOf(subLine[2])); } }else{//如果獲取值 if(list1.contains(Integer.valueOf(subLine[1]))){ int n =list1.indexOf(Integer.valueOf(subLine[1])); System.out.println(list2.get(n)); int key=list1.get(n); int value = list2.get(n); list2.remove(n); list1.remove(n); list1.add(key); list2.add(value); }else{ System.out.println(-1); } } } sc.close(); } }