给出n个数让你通过下面两种操莋,把它们转换为同一个数求最少的操作数。
基本思路:首先枚举出每个数能够到达的数字并且记录下到达该数组需要的步数然后从箌达次数为n次的数字中选择步数最小的即为***。
对于一个数字Ai它可以变换得到的数字可以分为三类:
1.向左移动n位得到的数字;
2.向右移動n位得到的数字;
3.奇数/2后得到的偶数向右移动n位得到的数字。
1、对 Ai 执行左移操作记录 Ai 通过左移能够得到的数字,上限为1e5vis 数组加1,cnt数组記录步数
2、对 Ai 执行右移操作直到 Ai 为0.
若 Ai 的最低位为1,右移一步之后进行左移,上限为1e5维持vis数组和cnt数组.
若 Ai 的最低位为0,右移一步维持vis數组和cnt数组.
这样我们就把一个数的所有情况都处理出来了,并且是最少的操作数.
最后遍历数组找 vis[i] 为n并且操作数最小。