企业网站建设公司司智能营销系统
1558. 得到目标数组的最少函数调用次数
- 原题链接:
- 完成情况:
- 解题思路:
- 参考代码:
原题链接:
1558. 得到目标数组的最少函数调用次数
https://leetcode.cn/problems/minimum-numbers-of-function-calls-to-make-target-array/description/
完成情况:
解题思路:
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;}
}