高中数学也能解决阿里面试算法题?

大家好,我是新熊君。

今天跟大家分享一道阿里的算法面试题。

题目描述

给定一个正整数,把它拆分为若干个数的和,记这若干个数的积为,求的最大值。

题目分析

这道题正常的思路是使用动态规划算法。

假设 为正整数 拆分后能够得到最大的积。

状态转移时只需要遍历小于的每一个正整数 ,

取 的最大值,即:


时间复杂度,空间复杂度

进一步分析

假设把个数拆分成个数之和,乘积为,有:


由均值不等式:

将和代入上式得:

故本质是求的最大值。

两边同时取对数,得:

令:

求导后得到:

则当时取得最大值

因为e的值与3最接近,所以最终得到一个优化的算法:

先对尽可能多地拆分3:

如果剩余的数为2或0,则拆分结束。

如果剩余的数为1,则将拆分好的3拿一个与剩余的1组合拆分成两个2。

此题得解。

只需要使用快速幂求一下幂次即可,

时间复杂度,空间复杂度 。

用高中数学就解决了这道面试算法题。

你可能感兴趣的:(高中数学也能解决阿里面试算法题?)