leetcode 343. 整数拆分 剑指 Offer 14- I. 剪绳子

基于Java+Maven+Testng+RestAssured+Allure+Jenkins搭建一个接口自动化框架 2、有一个提取表达式列,通过编写每个接口的JSON提取表达式,后边在解析Excel时,对接口执行后的响应数据用该表达式提取出来,保存到环境变量,如果某些接口需要前置接口的响应数据,我们就可以从环境变量中获取该数据出来,从而解决了接口关联的问题。1、在之前介绍过全局配置类Contants中添加一个控制台日志开关控制权限,如果选择为false,则控制台不输出日志,将日志输出到allure报表,选择为true,则在控制台输出日志,不输出到allure报表。 阅读详情
343. 整数拆分
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。

示例 1:

输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。
示例 2:

输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

剑指 Offer 14- 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
第一步:dp[n] 代表长度为n 分解后乘积最大值
第二步:找动态方程
假设分段后乘积最大值的每段绳子的长度为k[0],k[1]....
2.1 如果绳子分成了两段: dp[n] = dp[k[0]]*dp[k[1]](这里少说了一种情况 后面会说)
2.2 如果绳子分成了三段: dp[n] = dp[k[0]]*dp[k[1]]*dp[k[2]] 假设k[0] + k[1] = x, k[2] = n-x, 因为 dp[x] = dp[k[0]]*dp[k[1]] 所以 dp[n] = dp[x]*dp[n-x]
2.3 如果绳子分成了四段: dp[n] = dp[k[0]]*dp[k[1]]*dp[k[2]]*dp[k[3]] 假设 k[0] + k[1] = x, k[2] + k[3] = n -x ,因为 dp[x] = dp[k[0]]*dp[k[1]], dp[n-x] = dp[k[2]]*dp[k[3]], 所以 dp[n] = dp[x]*dp[n-x] ,可以看出规律 不管绳子分成几段,都可以按照两段来处理,即:dp[n] = dp[x]*dp[n-x]
2.4 这里再说一下2.1提到的少说的那种情况, 我们算的dp[x] 是绳子分解后的乘积最大值,但是当x这段绳子作为更长绳子一部分的时候,x 是可以不用分解的,即x也要考虑进去 最终的动态方程就变成了这样 dp[n] = max(dp[x], x) * max(dp[n-x], n-x)

第三部: 找边界
dp[1] = 0
dp[2] = 1

所以:
func cuttingRope(n int) int {
	dp := make([]int, n+1)

	dp[1] = 0
	dp[2] = 1

	for i := 3; i <= n; i++{
		dpMax := 0

		for j := 1; j <= i/2; j++{
			if tmpMax := max(dp[i-j], i-j)*max(dp[j], j);tmpMax > dpMax{
				dpMax = tmpMax
			}
		}

		dp[i] = dpMax
	}

	return dp[n]
}

func max(a, b int)int{
	if a > b {
		return a
	}

	return b
}
RT-Thread littefs控制GD32F4xx片内Flash GD32F4xx RT-Thread下使用littefs 控制片内flash 调试记录 阅读详情

相关推荐

阿里云Ubuntu部署Steam饥荒联机版服务器:从零到多人联机的完整指南

本文详细介绍了在阿里云Ubuntu系统上部署Steam饥荒联机版服务器的完整流程,包括环境准备、SteamCMD安装、服务端配置、Mod管理及后台运行技巧。通过2核4GB的ECS实例配置和端口设置,实现5人流畅联机体验,适合游戏爱好者快速搭建专属服务器。

weixin_29229261的博客 1025

LeetCode343 整数拆分 & 剑指Offer 14- I 剪绳子

LeetCode343 整数拆分 & 剑指Offer 14- I 剪绳子题目解题解题一:动态规划解题二:数学 题目 343 整数拆分 & 剑指Offer 14- I 剪绳子: 解题 解题一:动态规划 因为至少要剪成两段,所以先选取第一段的长度 j,再去看剩下的 i - j 不拆分和拆分的情况。 // javascript var cuttingRope = function(n) { const dp = new Array(n + 1).fill(0); for (le

355

体验灵雀云-创建基于Docker的云服务

今天体验了一下灵雀云,创建了第一个基于Docker的云服务。 1.登录灵雀云 2.开始使用 登录之后,从"控制台"进入操作界面,开始创建服务。 首先需要选择一个镜像。灵雀云已经为您提供了一些常用的镜像列表。请在“常用镜像”列表中,选择“其它”,然后找到“alauda/hello-world”镜像,点击它右侧的“选择”按钮,进入服务参数配置页面。 选择完要创建的

tomcat的专栏 3234

leetcode *剑指 Offer 14- I. 剪绳子 & *343. 整数拆分(2020.7.30)

【题目】*343. 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 说明: 你可以假设 n 不小于 2 且不大于 58。 【解题思路1】动态规划 对于的正整数 n,当 n≥2 时,可以拆分成至少两个正整数的和。令 k 是拆分出的第一个正整数

Sophia_fez的博客 440

告别外置电阻!揭秘MAX22201集成电流检测的5大设计优势(附PCB布局案例)

本文深入解析MAX22201集成电流检测技术在直流有刷电机驱动中的5大设计优势,包括BOM成本降低、PCB空间优化、动态性能提升等。通过与传统方案(如DRV8871+外置电阻)的实测对比,展示其在高精度电流检测、抗干扰能力和PCB布局简化方面的突破,并附有详细的PCB布局案例和配置指南。

weixin_29189377的博客 243

AD24层次原理图设计避坑指南:如何解决端口连接与自动交叉引用问题

本文深入解析AD24层次原理图设计的核心机制,聚焦端口连接错误、自动交叉引用干扰等常见问题。通过对比自上而下与自下而上设计流程,提供端口类型匹配、命名规范等实用解决方案,并指导如何关闭烦人的红色框线视觉干扰,帮助工程师高效避坑,实现复杂系统的模块化设计。

wdx01234567的博客 620

leetcode 343. 整数拆分 & leetcode 剑指 Offer 剑指 Offer 14- I. 剪绳子

343. 整数拆分 思路一:动态规划 一个整数被拆分成 k 和 (n-k)后,可以把(n-k)继续往下拆分,也可以选择不继续往下拆分,所以整数 n 被拆分后得到的乘积最大值就是 k*(n-k) 或者 k*(n-k被拆分后得到的乘积最大值)。由于每个正整数对应的最大乘积取决于比它小的正整数对应的最大乘积,因此可以使用动态规划求解。 令dp[i] 表示把正整数 i 拆分成至少两个整数后,这...

Lucky小黄人的博客 176

向量数据库:PGVector

PGVector 是一个基于 PostgreSQL 的扩展插件,为用户提供了一套强大的向量存储和查询的功能

m0_37559973的博客 1万+

七夕力扣刷不停,343. 整数拆分(剑指 Offer 14- I. 剪绳子、剑指 Offer 14- II. 剪绳子 II)

学而不思则罔,思而不学则殆

这里是菠萝味菠萝啤的博客 289

高通Camera IFE时钟配置

高通Camera IFE时钟配置中的minHorizontalBlanking和minVerticalBlanking配置计算方法

一个懒癌的驱动工程师的随笔分享 6168

Python之ae-toolbox包语法、参数和实际应用案例

ae-toolbox(全称 after-effects-toolbox)是 Python 生态中专门用于 Adobe After Effects(AE)自动化操作 的工具包,基于 AE 的 ExtendScript(JSX)桥接技术,实现 Python 与 AE 的跨语言通信。

王国平的博客 1174

剑指 Offer 14- I. 剪绳子;力扣343. 整数拆分

参考题解,本题使用数学思维解析。 根据题意,需要把正整数n分为k个正整数的和(k>=2),并且要使这些整数的乘积最大化。 那么,问题是:怎么拆? 由于还未学习动态规划,我只能参考题解中求导方式来理解这个题。 怎么拆? 将n按某个数均等分可使乘积最大化。 则得出 n=a*x;将n分为a个x的和,当然这里理想化处理了,n不一定能整除x。 接下来讨论n与3的关系: 若n=2;只有一种情况:2=1+1 ;最终乘积为1; 若n=3;3=1+1+1;3=1+2 ;乘积最大为2; ...

My0720的博客 181

机械式激光雷达实现原理以及特性总结

本文介绍了机械式激光雷达的技术原理和核心特性。该技术通过机械旋转结构实现360°三维扫描,采用飞行时间法测距并生成点云数据。核心优势包括全向扫描、长距高精度和成熟度高,但存在体积大、成本高、可靠性受限等局限。典型应用于自动驾驶测试车、测绘建模等领域。与固态激光雷达相比,机械式在视场角和探测距离方面有优势,但在体积、成本和可靠性方面处于劣势。该技术目前主要应用于对成本不敏感的专业场景。

start_up_go的博客 262

【力扣剑指 Offer 14- I. 剪绳子、343. 整数拆分、剑指 Offer 14- II. 剪绳子 II】dp(python3)

题目描述 https://leetcode-cn.com/problems/integer-break/ 思路题解 dp,其中2、3的要单独考虑,因为2、3单独拆分和正常拆分不一样 class Solution: def integerBreak(self, n: int) -> int: if n==2:return 1 if n==3:return 2 dp=[0]*(n+1) dp[2]=2 dp[3]=3

戴某某 168

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

剑指 Offer 14- I. 剪绳子 / LeetCode 343. 整数拆分(动态规划)

难度:中等给你一根长度为 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。

WorldMaya的博客 303

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

[Leetcode 343]. 整数拆分 [剑指offer] 面试题14- I. 剪绳子

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 给你一根长度为 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。 思路: 动态规划 主要思路:在已知长度为n的绳子最大乘积的基础上,长度n+1绳子的最大

thunder_k的博客 244

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LeetCode 剑指 Offer 14- II 剪绳子 II

LeetCode 剑指 Offer 14- II 剪绳子 II题目解题解题一:数学/贪心算法 + 循环求余解题二:数学/贪心算法 + 快速幂求余 题目 解题 题目 解题 剑指 Offer 14- I. 剪绳子 、343. 整数拆分 LeetCode343 整数拆分 & 剑指Offer 14- I 剪绳子 剑指 Offer 14- II. 剪绳子 II right-aligned 文本居右 这道题 n 的最大取值不再是 58 而是 1000,结果也要去模,因而不能再用动态规划

714

leetcode 剑指offer 14-II.剪绳子 II

原题如下 https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/ 与 343.整数拆分 相同 https://leetcode-cn.com/problems/integer-break/ 题解 方法一 总体思路就是,尽量拆成若干个3,倘若拆不出整个3,则尽量出现2,余1的不要拆成1和3,而要拆成2和2. //2020.06.09 重做343 //执行用时 :0 ms, 在所有 Java 提交中击败了100.00%的用户 //内存消耗 :36.2 M

zhuruihe2014的博客 334

LeetCode-剑指offer-14-I-剪绳子(记忆化递归、动态规划、数学推导)

目录题目要求解题过程 题目要求 原题链接:剑指 Offer 14- I. 剪绳子 | 343. 整数拆分 给你一根长度为 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

快乐学术猿 1541

(贪心) 剑指 Offer 14- I. 剪绳子 ——【Leetcode每日一题】

剑指 Offer 14- 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。

weixin_43412762的博客 454

【leetcode】【medium】剑指 Offer 14- I. 剪绳子​​​​​​​

剑指 Offer 14- 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 ...

lemonade13的博客 160

(贪心) 剑指 Offer 14- II. 剪绳子 II ——【Leetcode每日一题】

剑指 Offer 14- II. 剪绳子 II 给你一根长度为 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。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

weixin_43412762的博客 438

剑指 Offer 14- I. 剪绳子

剑指 Offer 14- I. 剪绳子 - 力扣(LeetCode) 和(1条消息)LeetCode第 343 题:整数拆分(C++)_zj-优快云博客一样 class Solution { public: int cuttingRope(int n) { if(n <= 3) return n-1; int a = n/3, b = n%3; if(b == 0) return pow(3, a); if(b == 1)

zj 113

剑指 Offer 14- I:剪绳子

剑指 Offer 14- 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

菊头蝙蝠的博客 424

剪绳子 算法_LeetCode By Python: 343. 剑指Offer第2版 14.1 & 2. 剪绳子

题目类型LeetCode 第343题 整数拆分《剑指Offer第2版》第14-I题 剪绳子题目给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] 。请问 k[0]*k[1]*...*k[m] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的...

weixin_39836803的博客 76

算法——剑指 Offer 14- I. 剪绳子(LeetCode 343)

剑指 Offer 14- 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。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

知北行的博客 182
上一篇: 常见限流算法和go语言time/rate go.uber.org/ratelimit讲解
tzh_linux
博客等级 码龄12年 12粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值