剪绳子 - 贪婪算法 - Java实现

学习 考证 帆软 FCP-FineBI V6.0 考试经验 参加这个学习班,认识了新朋友,可能是我职业生涯中的一次重要体验,其实大家想想 IT 和 医生一样都是需要终身学习的。只是医生学习周期更长但是回报率也更高。大家觉的呢? 阅读详情

16. 剪绳子 - 贪婪算法

问题描述

给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m].请问k[0]k[1]…*k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18.

分析

n<2时,返回0;n=2时,返回1;n=3时,返回2

根据数学计算,当n>=5时,2(n-2)>n,3(n-3)>n,这就是说,将绳子剪成2和(n-2)或者剪成3和(n-3)时,乘积大于不剪的乘积,因此需要把绳子剪成2或者3。并且3(n-3)>=2(n-2),也就是说,当n>=5时,应该剪尽量多的3,可以使最后的乘积最大。对于长度是n的绳子,我们可以剪出n/3个3,剩余长度是1或者2,如果余数是1,就可以把1和最后一个3合并成4,那么4剪出两个2得到的乘积是4,比1*3大,因此这种情况下,需要将3的个数减少1,变成两个2;如果余数是2,那么无需做修改。

可以得到最大的乘积是:3timesOf3 * 2timesOf2

代码

public static int maxProductAfterCutting_solution(int length) {
    if (length < 2) {
        return 0;
    }
    if (length == 2) {
        return 1;
    }
    if (length == 3) {
        return 2;
    }
    // 尽可能多去剪长度为3的绳子
    int timesOf3 = length / 3;
    // 当最后剩下偿付为4 的时候,不能再剪长度为3 的绳子段了
    // 此时最好剪成 长度为 2 的两段,因为 2 * 2  > 3 * 1
    if(length - timesOf3*3 == 1){
        timesOf3 --;
    }
    int timesOf2 = (length - timesOf3 * 3) / 2;
    
    return (int)Math.pow(3, timesOf3) * (int ) Math.pow(2, timesOf2);
}
Codex入门10-Goal自主任务(进阶必学:设定目标就不管了,AI自己干活到完成) /goal 是Codex CLI最强大的进阶功能——设定一个目标,AI就会制定计划、分步执行、自我测试、持续迭代,即使你关掉终端也会继续。本文详解/goal的工作原理、配置启用方法、常用命令(pause/resume/status/clear),以及如何写出高质量的目标描述让AI高效自主完成任务。 阅读详情

相关推荐

(蓝桥杯)STM32G431RBT6(SysTick timer)

选用最基础的定时器。

2301_81764359的博客 1903

贪心算法(Java版本)

贪心算法(Java版本)

Charge8的博客 2900

Linux虚拟机mysql安装教程(详细步骤)出现了一个错误:依赖检测失败

Linux虚拟机安装mysql的详细步骤(有报错预警哦)

m0_74953387的博客 5258

数据结构与算法(三)贪心算法(Java)

数据结构与算法(三)贪心算法(Java)

ACGkaka的博客 3157

Python实现安居客新房数据抓取简易版

本文介绍使用Python爬取安居客新房楼盘数据的方法,重点针对三四线城市。通过分析移动端H5页面结构,采用滚动加载方式获取推荐楼盘列表(class="recomm-list"),从中提取楼盘ID并拼接详情页链接。代码展示了如何解析HTML标签获取楼盘名称、状态、价格、户型等基本信息,并处理图片URL。爬取过程涉及一个一级页面和两个二级页面,同时提到可能遇到的验证码问题将在后续处理。核心代码使用BeautifulSoup解析HTML,requests发送请求,并将数据存入MySQL数据库。

qq_37604998的博客 475

STM32F103多通道PWM输出避坑指南:TIM1_CH1异常输出的解决方案

本文深入解析STM32F103多通道PWM输出中的TIM1_CH1异常问题,提供从时钟配置到GPIO复用的系统化解决方案。通过黄金法则配置流程和高级调试技巧,帮助开发者快速定位并解决PWM输出不稳定、占空比异常等问题,同时拓展多定时器协同和互补PWM等高级应用场景。

weixin_29194817的博客 117

c# 贪心算法(Greedy Algo)

贪心选择是总是选择剩余活动中完成时间最短的下一个活动,并且开始时间大于或等于先前选择的活动的结束时间。我们可以根据活动的完成时间对活动进行排序,以便我们始终将下一个活动视为完成时间最短的活动。在实现中,假设活动已经按照完成时间排序,否则时间复杂度将上升到 O(N*log(N)),辅助空间将上升到 O(N),因为我们必须创建一个二维数组来将开始时间和结束时间存储在一起。B 中的活动是独立的,并且 k 的完成时间是所有活动中最小的。每一步,我们都可以做出当前看来最好的选择,从而得到整个问题的最优解。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1594

fanuc机器人KAREL中 函数的应用

本次课程讲解编程的思路。很多的同学都玩过积木,一个一个的模块逐渐累积起来,通过彼此之间的相互联系,最终形成一个完整的整体。其实编程也是这样。 将一个对象根据其特点进行模块化拆分,尤其是一些特点非常相似的内容,将其变成一个模块。然后通过传递参数,实现不同的功能,这就是模块化编程。

haier123888的博客 2744

贪心算法

贪心算法的基本要素 对于一个具体的问题,怎么知道是否可用贪心算法解此问题,以及能否得到问题的最优解呢?这个问题很难给予肯定的回答。 但是,从许多可以用贪心算法求解的问题中看到这类问题一般具有2个重要的性质:贪心选择性质和最优子结构性质。 1、贪心选择性质 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素

ProveYourself的博客 728

突破限制:巧用Azure OpenAI,畅玩Gemini模型

通过 Azure OpenAI 服务这一巧妙的途径,间接调用 Gemini 模型,打破网络限制的壁垒。本文将详细介绍这一方法,无论你是人工智能领域的新手,还是经验丰富的开发者,都能从中获取实用的技巧,轻松开启 Gemini 模型的探索之旅

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 181

YOLOv12创新改进 | 全网独家创新篇、小目标检测改进 | AAAI 2025 | 引入HS-FPN中的HFP和SDP创新点,从频域增强小目标特征,淘汰FPN进行升级,助力YOLOv12有效涨点

本文提出了HS-FPN(高频和空间感知特征金字塔网络),通过HFP(高频感知)模块增强小目标特征,SDP(空间依赖感知)模块捕获像素间空间依赖关系。实验在AI-TOD等小目标数据集上验证了该方法的有效性,相比FPN显著提升检测性能。文章详细介绍了HS-FPN的网络结构、核心代码实现及在YOLOv12中的应用方法,并提供多种改进版本的yaml配置文件,为小目标检测任务提供了有效的解决方案。

Ai缝合怪、助力小伙伴高效发论文 338

java贪心算法

贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而。假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。如何选择最少的广播台,让所有的地区。贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。希望能够导致结果是最好或者最优的算法。3 贪心算法最佳应用-集合覆盖。1 应用场景-集合覆盖问题。

papillonlong的博客 488

MIKE水动力笔记7_实测数据与模型输出结果的拟合对比

上一博文【MIKE水动力笔记6】主要讲解如何自己制作实测数据的时间序列文件dfs0,而本博文讲解如何进行实测数据与模型输出结果的拟合对比。

晏长街的博客 1万+

剑指OFFER笔记_14_2_剪绳子(贪婪算法)_JAVA实现

剑指OFFER笔记_14_2_剪绳子(贪婪算法)_JAVA实现题目:剪绳子(贪婪算法)解题思路代码函数主体部分代码测试部分代码运行结果截图LeetCode运行截图 题目:剪绳子(贪婪算法) 给你一根长度为 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。

YesPlease的博客 244

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

《剑指offer》刷题——【动态规划与贪婪算法】面试题14:剪绳子(java实现)

《剑指offer》刷题——【动态规划与贪婪算法】面试题14:剪绳子一、动态规划1. 应用动态规划求解的问题的特点二、贪婪算法三、题目描述四、解题思路(一)动态规划1. 思路分析2. 代码实现(动态规划)3. 时间复杂度O(n^2)(二)贪婪算法1. 思路分析2. 代码实现3. 时间复杂度O(1) 一、动态规划 1. 应用动态规划求解的问题的特点 求一个问题的最优解(最大值、最小值) 该问题能否分...

HW_870754395的博客 973

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

[剑指Offer学习] 面试题N14:剪绳子问题的动态规划方法和贪婪算法的Java实现

剑指Offer:剪绳子Java实现题目描述规律发现适用于动态规划方法求解的问题的特点是:方法1:动态规划求解方法2:贪婪算法求解代码展示运行结果显示 题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长...

在互联网大海漂泊的一叶扁舟的博客 388

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Java】 剑指offer(13) 剪绳子

本文参考自《剑指offer》一书,代码采用Java语言。 更多:《剑指Offer》Java实现合集 题目   给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m≥1)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]*k[1]*…*k[m]可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。...

weixin_30553837的博客 98

LeetCode 之 剑指 Offer 14- II. 剪绳子 II(Java)

LeetCode 之 剑指 Offer 14- II. 剪绳子 II (Java) ,给你一根长度为 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。

渣渣的夏天 943

剪绳子 -- java

题目描述 给你一根长度为 n 的绳子,请把绳子减成 m 段(m、n都是整数,n > 1 并且 m > 1, 每段绳子的长度记为k[0], k[1],…,k[m]。 请问k[0]*k[1]k[2]…*k[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成的长度为2、3、3三段,此时得到的最大乘积是18。 题目考点 考察应聘者的抽象建模能力。应聘者需要把一个具体的场景抽象成一个能够用动态规划或者贪婪算法解决的模型。 考察应聘者对动态规划和贪婪算法的理解。能够灵活运用动态规划解决问题的

hello world 551

剪绳子 算法_动态规划与贪婪算法剪绳子(实现与思路)

下面给大家分享的是动态规划与贪婪算法剪绳子的代码实现与思路,感兴趣的朋友可以一起来了解一下,一共有3种代码实现思路哦。题目:给你一条长度是n的绳子,将绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记做k[0],k[1],...,k[m]。问:k[0]xk[1]x...xk[m]可能的最大乘积是多少?例:在绳子长度是8的时候,我们将它剪成长度分别是2、3、3的三...

weixin_35712571的博客 345

LeetCode 之 剑指 Offer 14- I. 剪绳子(Java)

LeetCode 之 剑指 Offer 14- I. 剪绳子 (Java) ,给你一根长度为 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。

渣渣的夏天 842

剑指offer面试题14:剪绳子(Java 实现)

题目:给你一根长度为 n 的绳子,请把绳子剪成 m 段 (m 和 n 都是整数,n &gt; 1并且m &gt; 1)每段绳子的长度记为 k[0],k[1],…,k[m].请问 k[0]k[1]…*k[m] 可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18. 方法一:动态规划。时间复杂度为 O(n²),空间复杂度为 O(n) 可以...

weixin_41163113的博客 283

Java 实现剪绳子

给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m].请问k[0]k[1]…*k[m]可能的最大乘积是多少?

学而时习之 3665

【Java】面试题14:剪绳子

题目:剪绳子 给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n&gt;1并且m≥1)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]k[1]…k[m]可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。 主要思路: 思路一:动态规划:f(n) = max(f(i)*f(n-i)), 其中 0<i<n,从1到n/2...

小小核桃 452

[剑指Offer]- 剪绳子

题目描述 给定一根长度为n的绳子,请把绳子剪成m段,每段绳子记为k[0],k[1]……k[m]。请问k[0]*k[1]……*k[m]可能的最大乘积是多少?例如:当绳子长度为8时,我们把它剪成长度分别为2,3,3段,此时最大乘积为18. 解题思路 先用常规的需要O(n^2)时间和O(n)空间的动态规划的思路,接着用只需要O(1)时间和空间的贪婪算法来分析解决这个问题。 动态规划 首先定义函数...

LeoByte的编程驿站 2263

【题14 剪绳子】Java实现

https://www.jianshu.com/p/43acdf2f23c5

weixin_39795049的博客 296
上一篇: 剪绳子 - 动态规划 - Java实现
下一篇: 二进制中的1的个数 - Java实现
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值