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

【题目】

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

    }

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 17:28
25届每天都在焦虑找工作的事情0offer情绪一直很低落硬撑着面了一个岗位岗位有应酬的成分面试的时候hr给我出各种场景题问的问题比较犀利&nbsp;有点压力面的感觉感觉有点回答不上来本来就压抑的情绪瞬间爆发了呢一瞬间特别想哭觉得自己特别没用没绷住掉眼泪了事后想想觉得自己挺有病的&nbsp;真的破大防了
喜欢唱跳rap小刺猬...:我觉得没关系吧,之前有一次面试leader给我压力面,我顶住了压力,结果入职的时候发现组里氛围很差,果断跑路。其实从面试就能大概看出组的情况,面试体验好的组倒是不一定好,但是面试体验不好的组。。。就很难说
点赞 评论 收藏
分享
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务