文本描述
字节跳动2017笔试 【题目描述】给一个包含n个整数元素的集合个整数元素的集合a,一个包 含m个整数元素的集合b。 定义magic操作为,从一个集合中取出元素放到另里且过后每的平均值都大于 操作前。 注意以下两点: ①不可以把一个集合的元素取空,这样就没有平均值了 ②值为x的元素从集合b取出放入集合a,但集合a中已经有值为x的元素, 则a的平均值不变(因为集合元素不会重复),b的平均值可能会改变(因 为x被取出了) 问最多可以进行少次magic操作 输入: 35 125 23456 输出: 2 . packageZiJieTiaoDong; importjava.util.ArrayList; importjava.util.HashSet; importjava.util.Scanner; publicclassMoveMagic {staticintN=0; staticintM=0; publicstaticvoidmain(String[]args) {Scannersc=new Scanner(System.in);intn= sc.nextInt(); intm=sc.nextInt(); N=n; HashSet<Integer>setA=newHashSet<>(); ArrayList<Integer>list=newArrayList<>(); doublesumA=0; doublesumB=0; inta=0; for(inti=0;i<n;i++) {a=sc.nextInt(); setA.add(a); sumA+=a; } for(inti=0;i<m;i++) {a=sc.nextInt(); list.add(a); sumB+=a; } doubleaveA=sumA/n; doubleaveB=sumB/m; dfs(sumA,sumB,aveA,aveB,setA,list); System.out.println(count); } staticintcount=0; publicstaticvoiddfs(doublesumA,doublesumB,doubleaveA,double aveB,HashSet<Integer>setA, ArrayList<Integer>list) {if(list.size()==0){ count=list.size()-1; return; } intn=setA.size(); intm=list.size(); for(inti=0;i<list.size();i++) {intvalue=list.get(i); if((sumA+value)/(n+1)>aveA&&(sumB-value)/(m- 1)>aveB){ // 满足要求 setA.add(value); list.remove(i); aveA=(sumA+value)/(n+1); aveB=(sumB-value)/(m-1); / 操作后,递归 dfs(sumA+value,sumB-value,aveA,aveB,setA,list); / list.add(i,value); // 未操作if (setA.size()==n+1) {setA.remove(value); } aveA=sumA/n; aveB=sumB/m; } } if(M-list.size()>count){ } }