直接用Set集合记录各数字出现情况。
如果当前的数为偶数并且在集合中没有出现过的话。
我们就把他放到集合中并且自除2. 操作次数将会增加一次。
如果出现过的话 就不用操作了 因为他会和以前的那次一起操作 不用记录次数
代码很简短
import java.util.*; public class Solution { /** * 返回一个数,代表让这些数都变成奇数的最少的操作次数 * @param n int整型 代表一共有多少数 * @param a int整型一维数组 代表n个数字的值 * @return int整型 */ public static int solve (int n, int[] a) { HashSet<Integer>set = new HashSet<>(); int ans=0,x=0;; for(int i=0;i<n;i++) { x=a[i]; while(x%2==0&&!set.contains(x)) { set.add(x); x/=2; ans++; } } return ans; } }