得到目标数组的最少函数调用次数
【题目】
函数调用主要分为: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; }