描述
xiaod现在正在某个球场负责网球的管理工作。为了方便管理,他把每个球都编了号,且每个编号的球的总个数都是偶数。有一天,xiaod发现少了一个球,你能帮他找出丢的那个球的球号吗?
输入
有多组测试数据。每组数据包括两行。
第一行是一个整数N(0<N<1000000),表示现在所剩的球数。
随后的一行是N个数,表示所剩的各个球的编号M(0<M<10^9)。
输出
对于每组数据,输出弄丢的那个球的球号。
样例输入
5
1 1 3 6 6
3
1 2 1
样例输出
3
2
首先我先假设:输入的情况是1000000而输入的数据是1到500000
public class Test1 {
public static void main(String[] args){
int[] b=new int[1000000];
int z=1;
for(int i=1;i<1000000;i++){
b[i-1]=z;
if(i%2==0){
z++;
}
}
System.out.println("OK");
Test1 test1=new Test1();
test1.start(b);
}
public void start(int[] b){
for(int i=0;i<b.length;i++){
int a=0;
for(int j=0;j<b.length;j++){
if(j!=i){
if(b[i]==b[j]){
a=1;
break;
}
}
}
if(a==0){
System.out.println(b[i]);
break;
}
}
}
}
从运行结果看严重超时,算法复杂度应该是n的平方;
想想要不利用一下Set于是:
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;
public class Main {
Scanner scan=new Scanner(System.in);
public static void main(String[] args){
Main test1=new Main();
test1.start();
}
public void start(){
int a=scan.nextInt();
TreeSet<Integer> treeSet1=new TreeSet();
TreeSet<Integer> treeSet2=new TreeSet();
while(a>0){
int b=scan.nextInt();
if(treeSet1.contains(b)){
treeSet2.add(b);
}
treeSet1.add(b);
a--;
}
Iterator<Integer> iterator1=treeSet1.iterator();
Iterator<Integer> iterator2=treeSet2.iterator();
while(iterator1.hasNext()){
int a1=iterator1.next();
if(iterator1.hasNext()){
int a2=iterator2.next();
if(a1!=a2){
System.out.println(a1);
break;
}
}else{
System.out.println(a1);
break;
}
}
}
}
但经过测试超时。。。。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int a=scan.nextInt();
int[] b=new int[a];
int k=0;
for(int i=0;i<a;i++){
k^=scan.nextInt();
}
System.out.println(k);
}
}