【编程题】腾讯笔试第一题(Java实现)
题目描述
有一天,小Q发现了n个被上锁的宝箱和m串钥匙。第i个宝箱上写着一个整数a,第串钥匙上写着一个整数b。 小Q已经通过一些古籍得知了这些宝箱内有很多的珍贵的宝物。所以他想尽可能多地打开这些宝箱。
当且仅当第i个宝箱上的数字ai;与第j串钥匙上的数字bj;之和为奇数的时候,这个宝箱才能被这串钥匙打开。每个宝箱只能被打开一次,且每一串钥匙也只能被使用一次。
现在小Q想知道他最多能开多少个宝箱,请你帮他计算出这个结果。
输入描述:
第一行两个整数,n和m,表示宝箱的数量和钥匙的数量第二行n个整数,a1,ag.-an, 表示每个宝箱上的数字第三行m个整数,b2,2…b. 表示每个钥匙上的数字每两个数字之间用一个空格分隔
满足1<=n,m<=10^ 5,1<=ai<=10^ 9,1<=bi<=10^ 9
输出描述:
一个整数,表示最多能打开的宝箱的数量
题目代码
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
int[] a=new int[n];
int[] b=new int[m];
int aj=0;
int ao=0;
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
if((a[i]&1)==0)
ao++;
else
aj++;
}
int bj=0,bo=0;
for(int i=0;i<m;i++){
b[i]=sc.nextInt();
if((b[i]&1)==0)
bo++;
else
bj++;
}
int max=Math.min(bj,ao)+Math.min(aj,bo);
System.out.println(max);
sc.close();
}
}