【题目】
函数调用主要分为:1、将nums数组中的一个数+1
2、将nums数组中的每一个数*2
给你一个与 nums 大小相同且初始值全为 0 的数组 arr ,请你调用以上函数得到整数数组 nums 。
请你返回将 arr 变成 nums 的最少函数调用次数。
答案保证在 32 位有符号整数以内。
样例:
输入:nums = [1,5]
输出:5
解释:给第二个数加 1 :[0, 0] 变成 [0, 1] (1 次操作)。
将所有数字乘以 2 :[0, 1] -> [0, 2] -> [0, 4] (2 次操作)。
给两个数字都加 1 :[0, 4] -> [1, 4] -> [1, 5] (2 次操作)。
总操作次数为:1 + 2 + 2 = 5 。
【题解】
首先呢可以将题目的语句转换一下即为: 让nums中某个数减1,让nums中所有数全体除以2 所以我们可以将数组排好序,然后最大的那个数变为0了整个数组就全部为0了 在遍历数组的过程中要把奇数变成偶数,然后最后输出操作次数就好了。
【代码】
int minOperations(vector<int>& nums) {
if(nums[0] == 0 && nums.size() == 1){
return 0;
}
int cnt = 0;
sort(nums.begin(),nums.end());
while(nums[nums.size() -1]){
for(int i = 0;i < nums.size();i ++){
if(nums[i] % 2 == 1){
nums[i] --;
cnt ++;
}
nums[i] /= 2;
}
cnt ++;
}
return cnt - 1;
}



京公网安备 11010502036488号