I. 剪绳子(中等)
题目描述
给你一根长度为 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。
示例1
输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1
示例2
输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36
做题思路
1.目标
设n可以拆分成:n=n1+n2+……+na
求:max(n1*n2*……*na)
2.数学推论
(1)当所有绳段长度相等时,乘积最大
(2)最优的绳段长度为3
3.切分规则
(1)最优:把绳子尽可能切为多个长度为3的绳段,留下的最后一段绳子的长度可能为0,1,2三种情况。
(2)次优:若最后一段绳子长度为2;则保留,不再拆分为1+1。
(3)最差:若最后一段绳子长度为1;则应把一份3+1替换为2+2,因为2+2>3*1。
4.算法流程
(1)当n<=3,按照规则不应切分,但题目要求必须分成>1段,因此必须剪出一段长度为1的绳子,即返回n-1。
(2)当n>3,求n除以3的整数部分a和余数部分b,分为以下三种情况:
①b=0时,直接返回Math.pow(3,a);
②b=1时,要将一个1+3转换为2+2,返回Math.pow(3,a-1)*4;
③b=2时,返回Math.pow(3,a)*2。
代码
class Solution {public int cuttingRope(int n) {if(n<=3){return n-1;}int a=n/3,b=n%3;if(b==0){return (int)Math.pow(3,a);}if(b==1){return (int)Math.pow(3,a-1)*4;}return (int)Math.pow(3,a)*2;}
}
I. 剪绳子(中等)相关推荐
- 动态规划--09-[剑]剪绳子1[中等]
力扣 力扣 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] .请问 k[0]*k[ ...
- 剑指offer:面试题14- II. 剪绳子 II
题目:剪绳子 II 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] .请问 k[0]* ...
- 剑指offer:面试题14- I. 剪绳子
题目:剪绳子 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] .请问 k[0]*k[1 ...
- leetcode算法题--剪绳子 II
原题链接:https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/ 相关题目:剪绳子 1.循环求余法 //(x ^ a) % p; long re ...
- NOJ——1672剪绳子(博弈)
[1672] 剪绳子 时间限制: 500 ms 内存限制: 65535 K 问题描述 已知长度为n的线圈,两人依次截取1~m的长度,n, m为整数,不能取者为输. 输入 输入n, m:( 0 < ...
- 剪绳子python_Python剪绳子如何实现 Python剪绳子实现代码
本篇文章小编给大家分享一下Python剪绳子实现代码,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 题目:剪绳子 给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数, ...
- 【LeetCode笔记】剑指 Offer 14. 剪绳子 I II(Java、动态规划、偏数学)
文章目录 剪绳子 I 题目描述 思路 && 代码 1. 动态规划 O(n2n^2n2).O(n) 2. 最优解:数学方法 O(n).O(1) 二刷 剪绳子 II 题目描述 思路 &am ...
- 【LeetCode】剑指 Offer 14. 剪绳子
[LeetCode]剑指 Offer 14. 剪绳子 文章目录 [LeetCode]剑指 Offer 14. 剪绳子 两道题目的区别在于第二题 n 的取值范围更大 package offer;publ ...
- 剪绳子 算法_[校招-算法题]动态规划
动态规划(Dynamic Programming)是面试中非常常见的一种算法,可以解决很多复杂问题. 核心算法: 定义状态:dp[i],一个数组,具体几维根据问题定. 状态转移方程:dp[i] = b ...
- 14- I、 剪绳子(cuttingRope)
14- I. 剪绳子(cuttingRope) 1. python class Solution:def cuttingRope(self, n: int) -> int:if not n:re ...
最新文章
- python 以 utf-8 格式写文件
- boost::mp11::mp_unique相关用法的测试程序
- ITK:索引置换序列
- Linux网络编程 之 UDP编程(六)
- 你真的会用ABAP, Java和JavaScript里的constructor么?
- hive 导出json格式 文件_hive中创建hive-json格式的表及查询
- SLG手游Java服务器的设计与开发——架构分析
- 【C#】通过正则表达式对TextBox进行校验
- C#二进制文件读取序列化与反序列化
- MAX25————用vray还原模型在Substance Painter的光照以及材质效果
- MacBook没声音
- 关于CAN报文中ACK应答错误的检测原理
- [渝粤教育] 西南科技大学 统计学原理 在线考试复习资料(3)
- vue判断当前浏览器为IE低版本,给出升级提示;IE11及其他浏览器正常使用
- edvac是商用计算机吗,计算机的基础作业1
- Python代码在Pycharm中不起作用,但在Jupiter Notebook中执行良好
- pat 7-7 莫尔斯码(Morse Code) (15分) 模拟
- 使用devops的团队_DevOps团队如何为网络星期一做准备
- python爬取国家男女比例_用python爬取3万多条评论,看韩国人如何评价韩国电影《寄生虫》?...
- 通用嵌入式系统软件测试平台的设计