剑指offer:剪绳子
题目描述
给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
解题思路
- 找规律
链接:https://www.nowcoder.com/questionTerminal/57d85990ba5b440ab888fc72b0751bf8?f=discussion
来源:牛客网/*** 题目分析:* 先举几个例子,可以看出规律来。* 4 : 2*2* 5 : 2*3* 6 : 3*3* 7 : 2*2*3 或者4*3* 8 : 2*3*3* 9 : 3*3*3* 10:2*2*3*3 或者4*3*3* 11:2*3*3*3* 12:3*3*3*3* 13:2*2*3*3*3 或者4*3*3*3** 下面是分析:* 首先判断k[0]到k[m]可能有哪些数字,实际上只可能是2或者3。* 当然也可能有4,但是4=2*2,我们就简单些不考虑了。* 5<2*3,6<3*3,比6更大的数字我们就更不用考虑了,肯定要继续分。* 其次看2和3的数量,2的数量肯定小于3个,为什么呢?因为2*2*2<3*3,那么题目就简单了。* 直接用n除以3,根据得到的余数判断是一个2还是两个2还是没有2就行了。* 由于题目规定m>1,所以2只能是1*1,3只能是2*1,这两个特殊情况直接返回就行了。** 乘方运算的复杂度为:O(log n),用动态规划来做会耗时比较多。*/
class Solution {
public:int cutRope(int number) {if(number==2) return 1;if(number==3) return 2;int x=number%3;int y=number/3;if(x==0) return pow(3, y);else if(x==1) return pow(3,y-1)*2*2;else return pow(3,y)*2;}
};
- 动态规划
/*
动态规划求解问题的四个特征:
①求一个问题的最优解;
②整体的问题的最优解是依赖于各个子问题的最优解;
③小问题之间还有相互重叠的更小的子问题;
④从上往下分析问题,从下往上求解问题;
*/
class Solution {
public:int cutRope(int number) {if (number < 2)return 0;if (number == 2)return 1;if (number == 3)return 2;int* products = (int*)malloc((number + 1)*sizeof(int));//assert(products != NULL);memset(products, 0, (number + 1)*sizeof(int));/****长度为1、2、3、4的绳子的最大积********/products[0] = 0;products[1] = 1;products[2] = 2;products[3] = 3;int max = 0;int i = 0;int j = 0;for (i = 4; i <= number; i++){max = 0;for (j = 1; j <= i / 2; j++){int product = products[j] * products[i - j];if (max < product)max = product;products[i] = max;}}max = products[number];free(products);products = NULL;return max;}
};
剑指offer:剪绳子相关推荐
- python剑指offer剪绳子
题目 给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],-,k[m].请问k[0]k[1]-*k[m]可能的最大乘积是多少 ...
- 《剑指offer》c++版本 14.剪绳子
本题在牛客网剑指offer专项里没看到,原书第二版上有,如题: 这道题是开放的动态规划题,题目中只给了绳子长度,却没定义具体剪多少段,初遇此题,难以下手,看了题解,豁然开朗.设f(n)为常为n的绳子剪 ...
- 【LeetCode】剑指 Offer 14. 剪绳子
[LeetCode]剑指 Offer 14. 剪绳子 文章目录 [LeetCode]剑指 Offer 14. 剪绳子 两道题目的区别在于第二题 n 的取值范围更大 package offer;publ ...
- 【LeetCode】【剑指offer】【剪绳子(二)】
剑指 Offer 14- II. 剪绳子 II 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]... ...
- 剑指 Offer 14- II. 剪绳子 II
剑指 Offer 14- II. 剪绳子 II 题目描述 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[ ...
- 剑指Offer 14- I. 剪绳子(Medium)/ 剪绳子 II(Medium)/ 343. 整数拆分(Medium)
剑指Offer 14- II. 剪绳子 II(Medium) 343. 整数拆分(Medium) [题目连接] 题解 剪绳子(数学推导 / 贪心思想,清晰图解) 图解[暴力递归][记忆化技术][动态规 ...
- 【剑指offer】剪绳子(动态规划)
题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],-,k[m].请问k[0] * k[1] * -* k[m]可 ...
- 剑指offer第二版答案详细版(带详细解题思路)
1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...
- 剑指offer(60-67题)详解
文章目录 60 把二叉树打印成多行 61 序列化二叉树 62 二叉搜索树第K个节点 63 数据流中的中位数 64 滑动窗口的最大值 65 矩阵中的路径 66 机器人的运动范围 67 剪绳子 欢迎关注个 ...
- 【剑指offer】【leetcode精选题集】【Java】剑指offer题解合集 更新中
Leetcode题集 [剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet] [剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组] [剑指offe ...
最新文章
- 调整表格的行高_Word表格无法调整行高?尽然是这个原因,90%的人都可能遇到...
- 路易斯安那州立大学计算机科学,西北路易斯安那州立大学
- Azure系列2.1.13 —— CloudBlockBlob
- SAP Spartacus user form页面的css设计重构
- 原版英文书籍《Linux命令行》阅读记录1 | 什么是shell?
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(2)
- 为什么要先装IIS后装.Net Framework?
- 特斯拉上海工厂开工 Model 3月销量有望破万
- arduino控制点阵屏与蜂鸣器_还在为遥控项目发愁?Arduino遥控套装解决你的所有问题(下)...
- php5中使用xslt扩展,.NET_解析在.net中使用XSLT转换xml文档的示例详解,XSL即可扩展的样式表文件。 可 - phpStudy...
- vb连接mysql数据库报错_vb6连接mysql数据库
- assimp android build,Android assimp编译及引用
- c语言转换字符类型,C语言基础之数据类型转换
- SAP系统开发时查询库存的方…
- 图片过大怎么办?如何把图片压缩到最小
- winin10怎么锁定计算机,win10系统下设置电脑固定ip地址的方法
- ubuntu server 14.04 编译安装xen4.4.2配置vtpm(二)——Dom0内核编译
- 随记:普遍性验证、数学思维、代数基本定理及其它
- 第0章 计算机硬件与组成基础
- eclipse中创建spring boot项目
热门文章
- 22.2. 表管理(Table)
- 后台开发之IO缓冲区管理
- redis集群之REDIS CLUSTER
- lvs(+keepalived)、haproxy(+heartbeat)、nginx 负载均衡的比较分析
- android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序
- NSUserDefaults读取和写入自定义对象
- mysql非聚集索引区间查询_mysql的聚集索引和非聚集索引,回表查询,索引覆盖,最左前缀原则略解...
- qt向服务器传输文字_Qt 模拟 HTTP 表单提交文字或文件到服务器
- java pagemodel,Java PageModel
- 算法-判断一颗树是否是搜索二叉树