剑指 Offer 14- I. 剪绳子解题思路

news/2024/11/29 20:09:16/

文章目录

  • 题目
  • 解题思路
    • 优化

题目

给你一根长度为 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

提示:

2 <= n <= 58

解题思路

令 xxx 是拆分出的第一个正整数,则剩下的部分是 n−xn-xn−x,n−xn-xn−x 可以不继续拆分,或者继续拆分成至少两个正整数的和。由于每个正整数对应的最大乘积取决于比它小的正整数对应的最大乘积,因此可以使用动态规划求解。

public class Solution 
{public int CuttingRope(int n) {int[] dp = new int[n+1];for(int i = 2;i<=n ; i++){int currentMax = 0;for(int j = 1; j<i; j++){currentMax=Math.Max(currentMax,Math.Max(j*(i-j),j*dp[i-j]));}dp[i] = currentMax;}return dp[n];}
}

在这里插入图片描述

优化

翻到一个有意思的题解:
规则1,在质数中(不可由其他数组合乘积得到),只有3比其组合乘积大。比如 5 ,2 * 3 = 6比5大。
根据这个规则定下优先分配3。
但由于题目一定要分配成至少两个数,所以在n小于5的时候,有一点区别。 n < 4 时,1、2、3都无法由其他数字组合乘积得到,所以返回n-1。 n == 4 时,其组合数22比31大。
乘法中1无意义,3组合1等于无意义组合,因此弱于2*2 。 因此另一个规则是,优先分配成两个大于1的数。由于这个规则只适用于4,所以直接特殊处理了。

作者:煎蛋的少年
链接:https://leetcode.cn/problems/jian-sheng-zi-lcof/solutions/1318376/zai-zhi-shu-zhong-zhi-you-

学习的时候注释一下看懂代码ヾ(◍°∇°◍)ノ゙

public class Solution {public int CuttingRope(int n) {//特殊情况if (n < 4){return n - 1;}//特殊情况if (n == 4){return 4;}int res = 1;//只存在为res = 3*3*3*~*(3-3n)这种情况while (n >= 5){n -= 3;res *= 3;}return res * n;}
}

在这里插入图片描述


http://www.ppmy.cn/news/109081.html

相关文章

消息队列内容

问题有哪些&#xff1f; &#xff08;1&#xff09;消息队列为什么会出现&#xff1f; &#xff08;2&#xff09;消息队列能用来干什么&#xff1f; &#xff08;3&#xff09;使用消息队列存在的问题&#xff1f; &#xff08;4&#xff09;如何解决重复消费的问题&#…

Happy Equation(数论+讨论)

Happy Equation 题意 ​ 在 1 ≤ x ≤ 2 p 1\leq x\leq2^{p} 1≤x≤2p内&#xff0c;问有多少个x满足 a x ≡ x a ( m o d m ) a^{x}\equiv x^{a}\ (mod\ \ m) ax≡xa (mod m) 分析 ​ 通过打表发现&#xff0c;当a为奇数的时候&#xff0c;结果全为1&#xff0c;那么只需…

设计模式之~原型模式

定义&#xff1a;用原型实例指导创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象&#xff0c;而且不需知道任何创建的细节。 优点&#xff1a; 一般在初始化的信息不发生变化的情况下&#xff0c;克隆是最…

管理系统总结(前端:Vue-cli, 后端Jdbc连接mysql数据库,项目部署tomcat里)

根据所学的知识, 写一个管理系统, 顺便总结一些知识点 准备: 前端用vue-cli的框架, 后端用jdbc连接数据库, 项目部署tomcat服务器来完成交互 ●前端的vue-cli框架搭建可以看 点击跳转 的第二小结 ●后端的tomcat在idea里的相关的配置与集成,可以看 点击跳跃 文章目录 一、 前段…

NLP:文本预处理总览

1 用n-gram语言模型过滤低质量内容 使用n-gram语言模型对文本进行评估&#xff0c;从而过滤掉低质量的内容。具体来说&#xff0c;可以通过以下步骤进行&#xff1a; 1 将文本分成n-gram序列&#xff0c;其中n是一个整数。 2 使用已经训练好的n-gram语言模型对每个n-gram序列…

网工内推 | 快手、瑞芯微招运维,思科、红帽认证优先

01 快手 招聘岗位&#xff1a;IT系统运维 职责描述&#xff1a; 1、负责IT基础架构运维体系的建设和优化改进&#xff1b; 2、负责IT核心基础服务&#xff08;如DNS、负载均衡、容器&#xff09;的架构设计、平台建设和运维&#xff1b; 3、负责IT内部日志系统、监控系统、报警…

智警杯1.4---excel可视化

视频要点&#xff1a; 首先就是有数据透视表 点击数据透视表&#xff0c;分析&#xff0c;字段项目&#xff0c; 切片器筛选 切片器&#xff08;我希望用什么对数据进行一个筛选&#xff09; 跟下拉列表有点像&#xff0c;只不过切片器仅仅之对于数据透视表 依旧需要用su…

SpringBoot+原生awt,实现花花绿绿的图形验证码

图形验证码是用于验证用户身份的一种方式&#xff0c;通常在网站注册、登录或进行某些敏感操作时会使用。它通过展示一个包含随机字符或数字的图形&#xff0c;要求用户输入相应的字符或数字来证明其为真人而非机器人。图形验证码能有效地防止机器人攻击和恶意注册行为&#xf…