京东笔试9.17
第二题Monica排列 求最小操作次数,使得前k个元素 不重复并且在 [1,k]之间。 为什么我只能过60%啊,求教。 public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int k = in.nextInt(); ArrayList<Integer> nums = new ArrayList<>(); Map<Integer,Integer> map = new HashMap<>(); for(int i=0;i<n;i++){ int num = in.nextInt(); nums.add(num); } int res = 0,j=0; for(int i=0;i<k;i++){ if(!map.containsKey(nums.get(i)) && nums.get(i)<=k){ map.put(nums.get(i),1); } else{ j++; while(j<n){ if(j<=i) {j++; continue;} int num = nums.get(j); if(!map.containsKey(num) && num<=k){ res += j-i; nums.remove(j); nums.add(i,num);// swap to i => insert into i break; } j++; } } } System.out.print(res); }
#京东笔试#