一天一大 leet(整数拆分)难度:中等-Day20200730
时间:2022-07-25
本文章向大家介绍一天一大 leet(整数拆分)难度:中等-Day20200730,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。
示例:
1. 示例1
输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1
2. 示例2
输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36
说明:
你可以假设 n 不小于 2 且不大于 58
返回它的最大深度 3 。
抛砖引玉
思路
拆成 n 个数,n 不固定
这种类型的题目:规则确定,起始条件不确定
- 动态规划
- 递归
动态规划
枚举 n,dp 记录不同 n 的结果值,dp[n]即查询结果:
- 确定拆分的整数个数:2<=i<=n
- dp[i]为 i 拆分的整数乘积最大值
- 拆分两个以上j,dp[i - j] -> dp[i - j]拆分两个即以上子集
- 拆分两个j,i-j
/**
* @param {number} n
* @return {number}
*/
var integerBreak = function (n) {
let dp = Array(n + 1).fill(1)
for (let i = 2; i <= n; i++) {
let curMax = 0
for (let j = 1; j < i; j++) {
curMax = Math.max(curMax, Math.max(j * (i - j), j * dp[i - j]))
}
dp[i] = curMax
}
return dp[n]
递归
- 参数,要拆分的整数
- 终止条件:遇到已经拆分过的数组
递归的逻辑基本和动态规划一致:
- 拆分一个数字j出来
- 属于的i-j可以独立作为一个数字,也可以继续拆分
/**
* @param {number} n
* @return {number}
*/
var integerBreak = function (n) {
let dp = Array(n + 1).fill(1)
function dfs(n){
if (dp[n]) return dp[n];
let curMax = 0;
for (let i = 1; i < n; i++) {
curMax = Math.max(curMax, i * (n - i), i * dfs(n - i));
}
return dp[n] = curMax;
};
return dp[n]
}
优化的动态规划
/**
* @param {number} n
* @return {number}
*/
var integerBreak = function (n) {
if (n < 4) return n - 1;
let dp = Array(n + 1).fill(1)
for (let i = 3; i <= n; i++) {
dp[i] = Math.max(Math.max(2 * (i - 2), 2 * dp[i - 2]), Math.max(3 * (i - 3), 3 * dp[i - 3]));
}
return dp[n];
}
- MVC中局部视图的使用
- MVC发布后项目存在于根目录中的子目录中时的css与js、图片路径问题
- ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表、接口映射
- View与Control间的数据交互
- C#中Dispose和Close的区别!
- C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息
- 你真的会玩SQL吗?查询指定节点及其所有父节点的方法
- ASP.Net MVC框架配置与分析
- MVC利用MvcHtmlString在后台生成HTML
- ExtJs学习笔记(7)_获取GridPanel选中行的详细信息
- ExtJs学习笔记(5)_Ajax示例
- shell脚本之特殊符号总结性梳理
- Centos6.X 下安装并使用VNC的操作记录
- Linux系统是否被植入木马的排查流程梳理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 手把手教你配置vim,小白也可以
- 【NPM库】- 0x02
- 最长有效括号
- 统计全为1的子矩形
- Android Camera1中的人脸检测
- Executors功能如此强大,ThreadPoolExecutor功不可没(一)
- dotNET:怎样处理程序中的异常(实战篇)?
- 二维背包问题
- 小程序系列之禁用视频快进
- springBoot整合Mq报错:JmsMessagingTemplate that could not be found
- TCP:测试小工具TCPing
- 对象实例化内存布局与访问定位 Krains 2020-08-14
- 基于Docker Compose部署分布式MinIO集群
- Go语言 | 从并发模式看channel使用技巧
- 字节码文件 Krains 2020-08-04