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;
}
}