剪绳子 算法_算法-14.1.剪绳子
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]k[1]...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
尽可能多剪长度为 3 的绳子,并且不允许有长度为 1 的绳子出现。如果出现了,就从已经切好长度为 3 的绳子中拿出一段与长度为 1 的绳子重新组合,把它们切成两段长度为 2 的绳子。
/**
* 剪绳子1
* 证明:当 n >= 5 时,3(n - 3) - n = 2n - 9 > 0,且 2(n - 2) - n = n - 4 > 0。
* 因此在 n >= 5 的情况下,将绳子剪成一段为 2 或者 3,得到的乘积会更大。
* 又因为 3(n - 3) - 2(n - 2) = n - 5 >= 0,所以剪成一段长度为 3 比长度为 2 得到的乘积更大。
* @param n
* @return
*/
public int cuttingRope(int n) {
if (n < 2) {
return 0;
}
if (n == 2) {
return 1;
}
if (n == 3) {
return 2;
}
// 剪成长度为3的段数
// 最小基数为3或者2,不能为1,
int timesOf3 = n / 3;
// 这样做的目的是因为全部剪成了3的长度的时候,如果最后剩下一段为1
// 那么就会出现1*3<2*2,所以需要将其中一段长度为3的与剩下的长度为1的结合,变成两端长度为2的
if (n - timesOf3 * 3 == 1) {
timesOf3--;
}
int timesOf2 = (n - timesOf3 * 3)/2;
return (int) (Math.pow(3, timesOf3) * Math.pow(2, timesOf2));
}
如果答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
public int cuttingRope1(int n) {
if (n < 2) {
return 0;
}
if (n == 2) {
return 1;
}
if (n == 3) {
return 2;
}
// 剪成长度为3的段数
// 最小基数为3或者2,不能为1,
int timesOf3 = n / 3;
// 这样做的目的是因为全部剪成了3的长度的时候,如果最后剩下一段为1
// 那么就会出现1*3<2*2,所以需要将其中一段长度为3的与剩下的长度为1的结合,变成两端长度为2的
if (n - timesOf3 * 3 == 1) {
timesOf3--;
}
int timesOf2 = (n - timesOf3 * 3)/2;
return ((int) (Math.pow(3, timesOf3) * Math.pow(2, timesOf2)))%1000000007;
}
剪绳子 算法_算法-14.1.剪绳子相关推荐
- python实现五大基本算法_算法基础:五大排序算法Python实战教程
排序是每个算法工程师和开发者都需要一些知识的技能. 不仅要通过编码实现,还要对编程本身有一般性的了解. 不同的排序算法是算法设计如何在程序复杂性,速度和效率方面具有如此强大影响的完美展示. 让我们来看 ...
- 算法导论 算法_算法导论
算法导论 算法 Algorithms are an integral part of the development world. Before starting coding of any soft ...
- 算法组合 优化算法_算法交易简化了风险价值和投资组合优化
算法组合 优化算法 Photo by Markus Spiske (left) and Jamie Street (right) on Unsplash Markus Spiske (左)和Jamie ...
- 两个矩阵是否相交的算法_算法血拼:Google+百度+Alibaba+字节+Tencent+网易+360+拼夕夕...
最热的三伏天来了,相信有许多小伙伴们都已马不停蹄的在准备各大厂的秋招提前批了吧,不知算法与数据结构会不会成为你的坎? 恰好,我这两天花了点时间,整理了些各大厂(Google+百度+Alibaba+字节 ...
- 逻辑回归算法_算法逻辑回归
logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域.例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等.以胃癌病 ...
- python分治算法_算法-分治
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同.求出子问题的解,就可得到原问题的解,是一种分目标完成程序算法,简单的问题可用二分法完成. 1. ...
- JAVA工程师常用算法_算法工程师必须要知道的8种常用算法思想
算法思想有很多,业界公认的常用算法思想有8种,分别是枚举.递推.递归.分治.贪心.试探法.动态迭代和模拟.当然8种只是一个大概的划分,是一个"仁者见仁.智者见智"的问题. 1.1 ...
- 蝴蝶优化算法_算法|FFT基础及各种常数优化,5万字笔记:公式推导+代码模板...
作者:中二攻子 链接:https://ac.nowcoder.com/discuss/175409 来源:牛客网 本文含NTT.MTT.拆系数FFT.共轭优化FFT.多项式求逆与ln 约定: 1. 表 ...
- 有向图最长路径算法_算法数据结构 | 三个步骤完成强连通分量分解的Kosaraju算法...
强连通分量分解的Kosaraju算法 今天是算法数据结构专题的第35篇文章,我们来聊聊图论当中的强连通分量分解的Tarjan算法. Kosaraju算法一看这个名字很奇怪就可以猜到它也是一个根据人名起 ...
最新文章
- SharePoint 使用脚本为表单绑定事件
- 域名解析中“TTL”是什么意思?
- System.DBNull.Value与Null的区别
- 软件过程评估和软件能力评价之间的差异
- Excel VBA 打开对话框,获取文件夹路径
- 原生js更改html,原生js更改css样式的两种方式
- Android源码编译到/data/app方法
- 近期流行手机病毒“手机骷髅”解决方案
- 双边滤波(Bilateral Filtering)
- 沪深股市股票交易规则
- Excel 实现 平均数±标准差
- yocto之相关class总结
- 中国全国地面站点数据(1981-2010)、月平均气象、月平均降水、月平均相对湿度、月最大降水、月最高温度最低温度、月最高温平均值最低温平均值、高低温站点基础数据,气候数据
- 基于二元语义的中文语序分析
- 测试之美(2)对测试的几点理解----谁是利益相关者?
- Ubuntu 20.04.1 安装ROS-noetic 遇到的环境设置问题
- 人工智能-强化学习(2)
- ACP 云计算试题集
- 为深度学习选择最好的GPU
- 计算机通信网络扫描版,2015计算机通信与网络作业.pdf