当前位置: 首页 > news >正文

剑指 Offer 14- II. 剪绳子 II

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

示例 1:

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

贪心法

结论:每次拆成n个3,如果剩下是4,则保留4,然后相乘,但是这个结论需要数学证明其合理性!k神的数学证明

  1. n ≤ 3(2, 3) 时,按照规则应不切分,但由于题目要求必须剪成 m>1段,因此必须剪出一段长度为 1的绳子,即返回 n−1
  2. n = 4时,可以拆分成2+2,返回结果2*2=4
  3. n >4时,减掉多个3之后剩下的n=2, 3, 4, 因为2、3不需要再剪了(剪了反而变小);4剪成2x2是最大的,2x2恰巧等于4一个优秀的解释

注意res对1000000007取余一次,最后的结果也要取余。

class Solution {
public:int cuttingRope(int n) {if(n <= 3) return n - 1;if(n == 4) return 4;long res = 1, p = 1000000007;while(n > 4){res *= 3;res %= p;n -= 3;}// 最后n的值只有可能是:2、3、4。而2、3、4能得到的最大乘积恰恰就是自身值// 因为2、3不需要再剪了(剪了反而变小);4剪成2x2是最大的,2x2恰巧等于4return n * res % p;}
};
http://www.lryc.cn/news/2529.html

相关文章:

  • English Learning - Day55 作业打卡 2023.2.9 周四
  • pixhawk2.4.8-地面站配置-APM固件
  • golang 通道类型
  • 并发、并行、吞吐量、延迟、响应时间 含义理解
  • HTTP 和 HTTPS 的区别
  • 微搭低代码从入门到精通07-基础布局组件
  • Docker镜像的创建
  • 电子技术——MOS差分输入对
  • 树莓派 - 小记
  • 【论文解读|KDD2020】AKT. Context-Aware Attentive Knowledge Tracing
  • Geek Uninstaller:向流氓软件火力全开,超良心的软件彻底卸载工具
  • Java线程池
  • 2023-02-10 - 5 文本搜索
  • 华为OD机试 - 最近的医院(Python),简单直白
  • Leetcode.1223 掷骰子模拟
  • 数据分析到底该怎么学呢?讲真,真不难!
  • 活动星投票紫砂新青年制作一个投票活动
  • Git | 在IDEA中使用Git
  • < Linux >:Linux 进程概念 (4)
  • 七、Java框架之MyBatisPlus
  • C语言柔性数组
  • 支付功能测试用例
  • 牛客网Python篇数据分析习题(一)
  • 【C语言】“指针类型”与“野指针”
  • Linux:软链接和硬链接的理解
  • 力扣HOT100 (1-5)
  • 车载基础软件——AUTOSAR CP典型应用案例SOME/IP和TSN时间同步
  • 【Linux】操作系统与进程的概念
  • (1分钟突击面试) 高斯牛顿、LM、Dogleg后端优化算法
  • d3.js与echarts对比