码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 剑指offer 13. 剪绳子


    【剑指offer系列题解】

    【题目地址】

    题目描述

    给你一根长度为 n n n 绳子,请把绳子剪成 m m m 段( m m m、 n n n 都是整数, 2 ≤ n ≤ 58 2≤n≤58 2≤n≤58 并且 m ≥ 2 m≥2 m≥2)。

    每段的绳子的长度记为 k [ 1 ] 、 k [ 2 ] 、 … … 、 k [ m ] k[1]、k[2]、……、k[m] k[1]、k[2]、……、k[m]。

    k [ 1 ] , k [ 2 ] , … , k [ m ] k[1],k[2],…,k[m] k[1],k[2],…,k[m] 可能的最大乘积是多少?

    例如当绳子的长度是 8 8 8 时,我们把它剪成长度分别为 2 2 2、 3 3 3、 3 3 3 的三段,此时得到最大的乘积 18 18 18。

    样例

    输入:8
    
    输出:18
    
    • 1
    • 2
    • 3

    方法一:数学 O(n)

    首先把一个正整数 N N N 拆分成若干正整数只有有限种拆法,所以存在最大乘积。

    假设 N = n 1 + n 2 + … + n k N = n_1+n_2+…+n_k N=n1​+n2​+…+nk​ ,并且 n 1 × n 2 × … × n k n_1×n_2×…×n_k n1​×n2​×…×nk​ 是最大乘积。

    1. 通过观察可以发现, 1 1 1 尽量不能取。
    2. 如果 n i ≥ 5 n_i ≥ 5 ni​≥5 ,那么把 n i n_i ni​ 拆分成 3 + ( n i − 3 ) 3+(n_i−3) 3+(ni​−3) ,可以得到 3 ( n i − 3 ) = 3 n i − 9 > n i 3(n_i−3) = 3n_i−9 > n_i 3(ni​−3)=3ni​−9>ni​ ;
    3. 如果 n i = 4 n_i = 4 ni​=4 ,拆成 2 + 2 2+2 2+2 乘积不变,所以可以直接忽略 4 4 4 这个选项;
    4. 如果有三个以上的 2 2 2 ,那么 3 × 3 > 2 × 2 × 2 3×3 > 2×2×2 3×3>2×2×2 ,所以替换成 3 3 3 乘积更大;

    综上,尽可能的拆分到最多的 3 3 3 ,余下的 2 2 2 或 4 4 4 优先选择 2 2 2 。另外,这里需要注意 m m m 必须大于等于 2 2 2 ,所以绳子至少要分两段。

    class Solution {
    public:
        int maxProductAfterCutting(int length) {
            if (length <= 3)   return length - 1;
            int res = 1;
            //将lenght变成3的倍数
            if (length % 3 == 2) res = 2, length -= 2;
            if (length % 3 == 1) res = 4, length -= 4;  //两个2相乘
            while (length)   res *= 3, length -= 3;
            return res;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    欢迎大家在评论区交流~

  • 相关阅读:
    uniapp踩坑小伎俩记录
    KingbaseES参数track_activity_query_size介绍
    iOS 内存管理和优化
    Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第7章 Vue.js高级进阶 7.2 vue-cli目录结构
    Elastic Stack 8.0 安装 - 保护你的 Elastic Stack 现在比以往任何时候都简单
    SSM美众针纺有限公司人事管理毕业设计-附源码051708
    设计模式——策略模式
    一篇文章带你搞懂什么是幂等性问题?如何解决幂等性问题?
    认识一些分布函数-Frechet分布及其应用
    Open AI开发者大会:AI“科技春晚”
  • 原文地址:https://blog.csdn.net/Newin2020/article/details/126293658
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号