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

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

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:

原题链接:

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

https://leetcode.cn/problems/minimum-numbers-of-function-calls-to-make-target-array/description/

完成情况:

1558. 得到目标数组的最少函数调用次数_第1张图片

解题思路:

public static void main(String[] args) {
    //给你一个与 nums 大小相同且初始值全为 0 的数组 arr
    //要么一个加1【+1】,要么全乘2【*2】
    //初始全零,返回的时候,输出次数
    //然后题目会给你目标结果
    //采用结果倒推法,会更好一点。
}

/**
 *全程就两件事需要你做,遇到奇数则-1,,,,最后一圈结束则全部数/2
 * 一直循环,直到全部的数都变成0为止。
 *
 * @param nums
 * @return
 */

参考代码:

package LeetCode中等题02;

public class __1558得到目标数组的最少函数调用次数 {
    /**
     *
     * @param args
     */
    public static void main(String[] args) {
        //给你一个与 nums 大小相同且初始值全为 0 的数组 arr
        //要么一个加1【+1】,要么全乘2【*2】
        //初始全零,返回的时候,输出次数
        //然后题目会给你目标结果
        //采用结果倒推法,会更好一点。
    }

    /**
     *全程就两件事需要你做,遇到奇数则-1,,,,最后一圈结束则全部数/2
     * 一直循环,直到全部的数都变成0为止。
     *
     * @param nums
     * @return
     */
    public int minOperations(int[] nums) {
        int res = 0,maxN = 0;
        for (int num : nums){
            maxN = Math.max(maxN,num);
            while (num != 0) {
                if ((num & 1) != 0){
                    res++;
                }
                num >>= 1;
            }
        }
        //加法和乘法分离的计算
        if (maxN != 0){
            while (maxN != 0){
                res++;
                maxN >>= 1;
            }
            res--;      //-1时,进行的右移为0,认为的右移二进制
        }
        return res;
    }
}

你可能感兴趣的:(#,LeetCode题解,算法知识,java学习,算法,java,leetcode,数据结构,分治法)