开发者社区> 问答> 正文

遇到一个全奇数组问题,求解答

codancer 现在有 n 个正整数 a[1],a[2]…a[n],Tom 告诉 codancer 他可以进行下列操作,选择某个偶数 x,把这 n 个数中全部等于 x 的数字除 2,Tom 想知道把这 n 个数字全部变成奇数最少需要几次这样的操作?输入一个正整数n(1<=n<=100000),代表有n个正整数,接下来输入这n个正整数。输出 codancer 把这 n 个数字全部变成奇数的最少次数。

展开
收起
游客4skzfvnrxrzbi 2021-12-23 17:00:23 454 0
1 条回答
写回答
取消 提交回答
  • 从题意及示例可以知道,应该从大到小进行操作。当除 2 后,需要快速查找是否有相等的其他数,这个需求可以使用 HashSet 代替。因此,先将n个中的偶数入HashSet,再对HashSet中元素从大到小排序,依次遍历;每个元素除 2 后从 HashSet 查找,存在则移除,计数 +1,直到该数变成奇数。最坏情况下,除 2 过程没有重复数字 因此输入:6 [40,6,40,3,20,1] 输出:4 注意 1.x=40, 数组变为[20,6,20,3,20,1] 2.x=20,数组变为[10,6,10,3,10,1] 3.x=10, 数组变为[5,6,5,3,5,1] 4.x=6,数组变为[5,3,5,3,5,1] 因此最少需要 4 次

    2021-12-23 18:50:08
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载