【剑指offer】14、剪绳子
题目
给一根长度为n的绳子,请把绳子剪成m段(m,n都是整数且1),每段绳子的长度相乘最大乘积是多少?如绳子长度为8,当分别为2,3,3时,此时最大乘积18
思路1
此问题明显包含独立的子问题,用f(n)表示长度为n的绳子剪完后的最大乘积,则可以写出递推公式
f(n) = max{f(n-i) × f(i)}, 0 < i < n
因为自下而上的时间复杂度为O(n), 每次递推时要对i循环O(n) ,所以时间复杂度是O(n2)
我们对长度为8的绳子进行模拟。
f(4) = f(2) * f(2) = 4;
f(5) = f(2) * f(3) = 6;
f(6) = f(3) * f(3) = 9;
f(7) = f(3) * f(4) = f(2) * f(5) = 12;
f(8) = f(3) * f(5) = 18;
int maxProAfterCutting(int length){if (length < 2) return 0; //题目说大于1,因此这是异常输入if (length == 2)return 1;if (length == 3)return 2;int* products = new int[length + 1];products[0] = 0;products[1] = 1;products[2] = 2;products[3] = 3; //其实是从product[4]开始算,这里是为了计算,当输入0 1 2 3时,前面已经处理int max = 0;for (int i =4; i <= length; i++){max = 0;for (int j = 1; j <= i / 2; j++){int product = products[j] * products[i-j];if (max < product)max = product;products[i] = max;}}max = products[length];delete[] products;return max; }
思路2
贪心算法:
当n = 4时,最大乘积就是4.
当n >= 5时,尽可能多剪长度为3的绳子,当剩下为4的时候,就剪成两段2
也就是说,n>=5时,最大乘积都由若干个3,最多两个2构成的
证明很简单:
n >= 5时,3(n-3) >= 2(n-2) > n
转载于:https://www.cnblogs.com/shiganquan/p/9289984.html
【剑指offer】14、剪绳子相关推荐
- 【LeetCode】剑指 Offer 14. 剪绳子
[LeetCode]剑指 Offer 14. 剪绳子 文章目录 [LeetCode]剑指 Offer 14. 剪绳子 两道题目的区别在于第二题 n 的取值范围更大 package offer;publ ...
- 剑指 Offer 14.剪绳子(动态规划、数学分析)
一.题目内容 二.题目分析 这道题目讲道理,我看到的第一眼就是动态规划,但是后来提交之后,发现还有大佬考虑用数学分析得出精简解法,在这里我也会一 一阐述. 对于动态规划而言,按照老套路,首先定义dp数 ...
- 【LeetCode笔记】剑指 Offer 14. 剪绳子 I II(Java、动态规划、偏数学)
文章目录 剪绳子 I 题目描述 思路 && 代码 1. 动态规划 O(n2n^2n2).O(n) 2. 最优解:数学方法 O(n).O(1) 二刷 剪绳子 II 题目描述 思路 &am ...
- 剑指 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: 解题思路: 方法1:暴力递归 方法2:记忆化递归 方法三:动态规划 方法四,数学原理 题目描述: 给你一根长度为n的绳子,请把绳 ...
- 剑指offer:剪绳子
题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],-,k[m].请问k[0]xk[1]x-xk[m]可能的最大乘 ...
- 剑指Offer:剪绳子(动态规划、贪婪算法)
问题描述 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],-,k[m].请问k[0]xk[1]x-xk[m]可能的最大乘 ...
- 88. Leetcode 剑指 Offer 14- I. 剪绳子 (动态规划-基础题)
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] .请问 k[0]*k[1]*... ...
最新文章
- PC 时代旧神隐没,互联网的新二十年开始了
- homebrew的安装和使用
- 算法学习的链接(持续更新)
- java object.getclass_Java Object getClass() 方法
- sed 插入多行_Linux三剑客之sed
- C语言 函数值传递和址传递 - C语言零基础入门教程
- angularjs学习:事件
- DPDK初始化分析(二)
- 贴片铝电容识别及型号_贴片式铝电解电容常用型号封装
- url在传递的过程中要先进行一个转码,然后再进行解码,url的转码,url的解码
- 发红包的程序代码java_Java实现微信发红包
- 在Mac电脑中轻松打开终端程序的快捷方法
- COGS461. [网络流24题] 餐巾
- web性能测试基础(一)
- wow服务器合并信息,《魔兽世界》一区合并服务器正式通告
- Python学习week4-python元组与字符串
- 杰理烧录器驱动安装失败
- 怎么入驻印象淘宝短视频 申请通过印象淘宝条件要求
- kali2020 vnc安装,在Kali Linux 2020.x上安装和卸载VLC媒体播放器的方法
- Fundamentals of Computer Graphics, Fourth Edition 中文翻译
热门文章
- Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)
- Go 学习笔记(77)— Go 第三方库之 cronexpr(解析 crontab 表达式,定时任务)
- 【C#实践】三层实例:登录过程
- view(*args)改变张量的大小和形状_pytorch reshape numpy
- BERT-Pytorch demo初探
- 正则表达式 - 语法
- MLIR Python绑定
- NVIDIA数据中心深度学习产品性能
- 自动驾驶感知系统盘点
- Python:数据导入、爬虫:csv,excel,sql,html,txt