在牛牛面前放着个数,这些数字既有奇数也有偶数,只不过牛牛对奇数情有独钟,他特别想让这些数都变成奇数。
现在牛牛获得了一种能力,他可以执行一种操作:每次选中一个偶数,然后把这些数中与该数相等的数都除以2,例如现在有一个数组为,那么牛牛可以执行一次操作,使得这个数组变为。
牛牛现在想知道,对于任意的个数,他最少需要操作多少次,使得这些数都变成奇数?
3,[2,2,3]
1
只需做一次操作,会将其中的偶数2都变成1,满足了所有的数都是奇数的要求。
3,[1,3,7]
0
不需要做任何操作,因为所有的数原本就是奇数。
public int solve (int n, int[] a) { int count=0; TreeSet<Integer> set=new TreeSet<>(); for(int i:a) { if(i%2==0) set.add(i); } if(set.isEmpty()) return 0; while(set.size()!=0) { int i=set.pollLast()/2; count++; if(i%2==0) { set.add(i); } } return count; }