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

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。

示例 1:

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

示例 2:

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

提示:

  • 2 <= n <= 58

解题思路

1.题目要求我们将绳子剪切为乘积最大的 m 段,这其中蕴含着一个数学问题,就是当我们尽可能将绳子以长度 3等分为多段时,乘积最大。这个推论大家可以自己去证明一下。

2.有了这个推论,这个问题就轻而易举了,

①切分规则:
最优: 3 。把绳子尽可能切为多个长度为 3 的片段,留下的最后一段绳子的长度可能为 0,1,2 三种情况。
次优: 2。若最后一段绳子长度为 2 ;则保留,不再拆为 1+1 。
最差: 1。若最后一段绳子长度为 1 ;则应把一份 3+1 替换为 2+2,因为 2×2>3×1 
②算法流程:

  • 当 n≤3 时,按照规则应不切分,但由于题目要求必须剪成 m>1 段,因此必须剪出一段长度为 1 的绳子,即返回 n−1 。
  • 当 n>3 时,求 n 除以 3 的 整数部分 res 和 余数部分 mod (即 n=3res+ mod =),并分为以下三种情况:

       ①当 b=0 时,直接返回 3^a;

       ②当 b=1 时,要将一个 1+3 转换为 2+2,因此返回 3^{a-1} *4

       ③当 b=2 时,返回 3^a*2 

Picture1.png

代码实现

class Solution {public int cuttingRope(int n) {if(n <= 2){return 1;}if(n == 3){return 2;}int res = n / 3;int mod = n % 3;if(mod == 0){return pow(3,res);}else if(mod == 1){return pow(3,res - 1) * 4;}else {return pow(3,res) * 2;}}int pow(int i, int k){int sum = 1;for(i = 1; i <= k; i++){sum = sum * 3;}return sum;}}

测试结果

 

http://www.lryc.cn/news/116776.html

相关文章:

  • 【图论】单源最短路问题
  • 物理层扩展以太网
  • Llama 2 with langchain项目详解(一)
  • IDEA全局设置MyBatis中写SQL语句提示
  • Linux 内存管理
  • oracle怎样给某个普通用户授予杀自己用户会话的权限
  • redis的主从复制,哨兵和cluster集群
  • Crowd-Robot Interaction 论文阅读
  • 什么是LIMS系统,LIMS实验室管理系统
  • Python Opencv实践 - 图像属性相关
  • PCB制造中铜厚度的重要性
  • 浅谈高校宿舍水电表远程智能管理的研究与应用
  • 无货源跨境电商购物平台快速搭建(微商城、小程序、APP、网站)
  • 力扣:57. 插入区间(Python3)
  • List和数组互转方法以及踩坑点
  • css3背景渐变
  • windows 安装免费3用户ccproxy ubuntu 代理上网
  • B树的插入与删除过程
  • 【二分】CF1623 C
  • redis五大类型分析--list(1)
  • 【多重信号分类】超分辨率测向方法——依赖于将观测空间分解为噪声子空间和源/信号子空间的方法具有高分辨率(HR)并产生准确的估计(Matlab代码实现)
  • 【Express.js】集成Websocket
  • MachineLearningWu_14/P65-P69_Multiclass
  • 深入理解高并发编程 - SimpleDateFormat 类的线程安全问题
  • 接口幂等性实现方式
  • redis高可用之持久化
  • Cocos Creator 3.8 后期效果 Shader 编写(2/2) 进阶篇
  • 【JS自用模板】自动点击选课的操作模板
  • TENNECO EDI 项目——X12与XML之间的转换
  • C++项目:在线五子棋对战(网页版)