列表

详情


NC207569. 牛牛爱奇数

描述

在牛牛面前放着个数,这些数字既有奇数也有偶数,只不过牛牛对奇数情有独钟,他特别想让这些数都变成奇数。
现在牛牛获得了一种能力,他可以执行一种操作:每次选中一个偶数,然后把这些数中与该数相等的数都除以2,例如现在有一个数组为,那么牛牛可以执行一次操作,使得这个数组变为
牛牛现在想知道,对于任意的个数,他最少需要操作多少次,使得这些数都变成奇数?

输入描述







示例1

输入:

3,[2,2,3]

输出:

1

说明:

只需做一次操作,会将其中的偶数2都变成1,满足了所有的数都是奇数的要求。

示例2

输入:

3,[1,3,7]

输出:

0

说明:

不需要做任何操作,因为所有的数原本就是奇数。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3(3.5.2) 解法, 执行用时: 2337ms, 内存消耗: 26448K, 提交时间: 2020-08-14 16:49:03

class Solution:
    def solve(self , n , a ):
        # write code here
        s = set()
        for i in a:
            while i%2==0 and i not in s:
                s.add(i)
                i = i>>1
        return len(s)

C++ 解法, 执行用时: 74ms, 内存消耗: 20132K, 提交时间: 2022-07-20 20:47:03

class Solution {
public:
    int oddNumber(int n, vector<int>& a) {
        set<int> s;
        for(int i=0;i<n;i++)
            for(int j=a[i];!(j%2);j/=2) s.insert(j);
        return s.size();
    }
};

Go(1.14.4) 解法, 执行用时: 301ms, 内存消耗: 56692K, 提交时间: 2020-07-25 22:14:09

package main

// github.com/EndlessCheng/codeforces-go
func solve(_ int, a []int) (c int) {
	m:=map[int]bool{}
	for _, v := range a {
		for ; v&1==0 && !m[v]; v/=2 {
			m[v]=true
			c++
		}
	}
	return
}

上一题