得到目标数组的最少函数调用次数

【题目】

函数调用主要分为: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;

    }

全部评论

相关推荐

过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务