entrySet 对map进行遍历速度比较快
HashMap<Integer,Integer> map =new HashMap<Integer,Integer>();
Iterator<Map.Entry<Integer, Integer>> it=map.entrySet().iterator();
while(it.hasNext())
{
Map.Entry<Integer, Integer> en = it.next();
Integer maKey = en.getKey();
Integer maValue = en.getValue();
}
A和B正在准备即将到来的信息学全国联赛。
B非常喜欢写程序。写完程序以后,他必须先编译代码。
最初,编译器显示有Ñ个编译错误,其中每一个被表示为一个正整数。经过一番努力,B设法解决一个错误,然后又编译了下,又改正了一个错误。
B可以完全肯定,他纠正了两个错误,但他忘记了是哪几个编译错误消失了。
你能帮助B来找出那两个已经被改正的错误么?
Input
输入的第一行包含整数n(3≤n≤10^ 5) - 表示编译错误的初始数量。
第二行包含n个空格分隔的整数a1,a2,...,an(1≤ai≤10^9),表示第一次编译的时候出现的n个编译错误的序号。
第三行包含n-1个空格分开的整数b1,b2,......,bn-1,表示改正了一个错误以后,第二次编译中显示的错误。保证第三行中的所有数字都是第二行中的所有数字,除了一个被改正了的错误。
第四行有n-2空格分开的整数c1, c2,..., cn-2,表示在又改正了一个错误之后,第三次编译显示的错误。保证在第四行的所有数字都是来自第三行的,除了被改正的那个错误。
Output
输出只有两行,第一行输出一个整数,表示第一次被改正的错误的序号,第二行也输出一个整数,表示第二次被改正的错误的序号。题目保证输入数据都是正确的。
Sample Input
输入样例1:
5
1 5 8 123 7
123 7 5 1
5 1 7
输入样例2:
6
1 4 3 3 5 7
3 7 5 4 3
4 3 7 5
Sample Output
输出样例1:
8
123
输出样例2:
1
3
Hint
注意如果有相同序号的编译错误同时出现,B选手每次最多只能修改一个错误。
//package javasetmapvector1;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
//int[] a=new int[n];
//int[] b=new int[n];
HashMap<Integer,Integer> map1 =new HashMap<Integer,Integer>();
HashMap<Integer,Integer> map2 =new HashMap<Integer,Integer>();
HashMap<Integer,Integer> map3 =new HashMap<Integer,Integer>();
for(int i=0;i<n;i++)
{
//a[i]=sc.nextInt();
int x=sc.nextInt();
Integer k=map1.get(x);
if(k==null)
{
map1.put(x,1);
}
else
{
map1.put(x, k+1);
}
}
for(int i=0;i<n-1;i++)
{
//b[i]=sc.nextInt();
int x=sc.nextInt();
Integer k=map2.get(x);
if(k==null)
{
map2.put(x,1);
}
else
{
map2.put(x, k+1);
}
}
for(int i=0;i<n-2;i++)
{
int x=sc.nextInt();
Integer k=map3.get(x);
if(k==null)
{
map3.put(x,1);
}
else
{
map3.put(x, k+1);
}
}
int sum1=0,sum2=0;
Iterator<Map.Entry<Integer, Integer>> it=map2.entrySet().iterator();
while(it.hasNext())
{
Map.Entry<Integer, Integer> en = it.next();
Integer maKey = en.getKey();
Integer maValue = en.getValue();
Integer k= map3.get(maKey);
if(k==null||k<maValue)
{
sum2=maKey;
break;
}
}
Iterator<Map.Entry<Integer, Integer>> it1=map1.entrySet().iterator();
while(it1.hasNext())
{
Map.Entry<Integer,Integer> en=it1.next();
Integer key=en.getKey();
Integer value=en.getValue();
Integer k=map2.get(key);
if(k==null||k<value)
{
sum1=key;
break;
}
}
System.out.println(sum1);
System.out.println(sum2);
}
}