我是靠谱客的博主 可靠小天鹅,最近开发中收集的这篇文章主要介绍【贪心】B049_LC_得到目标数组的最少函数调用次数(先将奇数变偶数,再将偶数除以二),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述
给你一个与 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 

提示:
1 <= nums.length <= 10^5
0 <= nums[i] <= 10^9

方法一:贪心

我的做法是先将奇数变偶数,然后将偶数除以二,可以更快地减少到 0,正确性有待证明

class Solution {
public:
    int minOperations(vector<int>& A) {
        int n=A.size(), ans=0; sort(A.begin(), A.end());
        while (A.back()) {
            for (int i=0; i<n; i++) if (A[i]&1) {
                A[i]--, ans++;
            }
            for (int i=0; i<n; i++) {
                A[i]/=2;
            }
            ans++;                        
        }
        return ans-1;
    }
};

复杂度分析

  • Time O ( n l o g n ) O(nlogn) O(nlogn)
  • Space O ( 1 ) O(1) O(1)

最后

以上就是可靠小天鹅为你收集整理的【贪心】B049_LC_得到目标数组的最少函数调用次数(先将奇数变偶数,再将偶数除以二)的全部内容,希望文章能够帮你解决【贪心】B049_LC_得到目标数组的最少函数调用次数(先将奇数变偶数,再将偶数除以二)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部