找球号(三)

描述

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);
		
	}
	
	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值