- 题目描述:
- 设计思想:
-视频讲解链接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 cnt
JavaScript版本:
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回一个数,代表让这些数都变成奇数的最少的操作次数 * @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 };