题目链接:LeetCode 1558. 得到目标数组的最少函数调用次数
题意:

给你一个与 nums 大小相同且初始值全为 0 的数组 arr ,请你调用以上函数得到整数数组 nums 。
请你返回将 arr 变成 nums 的最少函数调用次数。
答案保证在 32 位有符号整数以内。
解题思路:
分析:要么给某个数 +1 , 要么给所有数 ×2,算一次操作
每个数(除了0)都要先加1,乘2才会有结果,如果往上变大,乘2会是最快的,
分析出当自己本身为奇数时,需要自己额外加1,否则就是某个数 除以 2的最大次数,然后和所有需要加1操作的次数相加就是答案
刚开始头脑一热,if后面判断为偶数时,加了个else,一直错...唉
class Solution {
/**
* @param Integer[] $nums
* @return Integer
*/
function minOperations($nums) {
$ans = 0;
$len = count($nums);
$maxn = 0;
for($i = 0; $i < $len; $i++) {
$k = $nums[$i];
$res = 0;
while($k) {
if($k == 1) {
$ans++;
break;
}
if($k % 2 == 1) {
$ans++;
$k--;
}
if($k % 2 == 0) {
$res++;
}
$k = $k / 2;
}
$maxn = max($maxn, $res);
}
return $maxn + $ans;
}
}

本文详细解析了LeetCode1558题目的解题思路,通过分析函数调用次数,探讨如何将初始值全为0的数组通过加1和乘2的操作,最少次数地转换为目标数组。分享了错误尝试与正确实现的经验。

549

被折叠的 条评论
为什么被折叠?



