直接用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;
}
}
京公网安备 11010502036488号