- 题目描述:
- 设计思想:
-视频讲解链接B站视频讲解
- 复杂度分析:
- 代码:
c++版本:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回一个数,代表让这些数都变成奇数的最少的操作次数
* @param n int整型 代表一共有多少数
* @param a int整型vector 代表n个数字的值
* @return int整型
*/
int oddNumber(int n, vector<int>& a) {
// write code here
map<int,int>mp;//进行数字的标记,只标记偶数即可
int cnt = 0;//统计操作次数
for(int i = 0;i < n;i ++){
//如果这个数为偶数,并且这个偶数第一次出现就进行以下操作
while(a[i] % 2 == 0 && !mp[a[i]]){
mp[a[i]] ++;
a[i] /= 2;
cnt ++;
}
}
return cnt;
}
};Java版本:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回一个数,代表让这些数都变成奇数的最少的操作次数
* @param n int整型 代表一共有多少数
* @param a int整型一维数组 代表n个数字的值
* @return int整型
*/
public int oddNumber (int n, int[] a) {
// write code here
Map<Integer,Integer> mp = new HashMap<Integer,Integer>();//进行数字的标记,只标记偶数即可
int cnt = 0;//统计操作次数
for(int i = 0;i < n;i ++){
//如果这个数为偶数,并且这个偶数第一次出现就进行以下操作
while(a[i]%2 == 0 && !mp.containsKey(a[i])){
mp.put(a[i],1);
a[i] /= 2;
cnt ++;
}
}
return cnt;
}
}Python版本:
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 返回一个数,代表让这些数都变成奇数的最少的操作次数
# @param n int整型 代表一共有多少数
# @param a int整型一维数组 代表n个数字的值
# @return int整型
#
class Solution:
def oddNumber(self , n , a ):
# write code here
cnt = 0#统计操作次数
mp = {}#进行数字的标记,只标记偶数即可
for i in a:
#如果这个数为偶数,并且这个偶数第一次出现就进行以下操作
while i % 2 == 0 and i not in mp:
mp[i] = 1
i//=2
cnt += 1
return cntJavaScript版本:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回一个数,代表让这些数都变成奇数的最少的操作次数
* @param n int整型 代表一共有多少数
* @param a int整型一维数组 代表n个数字的值
* @return int整型
*/
function oddNumber( n , a ) {
// write code here
let mp = new Map();//进行数字的标记,只标记偶数即可
let cnt = 0;//统计操作次数
for(let i = 0;i < n;i ++){
//如果这个数为偶数,并且这个偶数第一次出现就进行以下操作
while(a[i]%2 == 0 && !mp.get(a[i])){
mp.set(a[i],1);
a[i] /= 2;
cnt ++;
}
}
return cnt;
}
module.exports = {
oddNumber : oddNumber
};
京公网安备 11010502036488号