前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js剪绳子【剑指offer】

js剪绳子【剑指offer】

作者头像
kiki.
发布2022-09-29 08:16:41
2170
发布2022-09-29 08:16:41
举报
文章被收录于专栏:web全栈之路

经典的动态规划和贪婪算法

  1. 动态规划

思路:长度2有0种,长度3可以分成1,2或者1,1,1,有两种,长度4有三种,将最优解存起来,第二个循环根据前面的最优解找到本次的最优解存起来

代码语言:javascript
复制
function cutRope(number)
{
    // write code here
    if(number<=3){
        return number-1
    }
    //记录每一个number的乘积的最大值
    let arrMax=[0,1,2,3]
    let max=0
    //第一个循环往arrMax填入最大值
    for(let i=4;i<=number;i++){
        max=0
        //第二个循环找出最大值
        for(let j=1;j<=i/2;j++){//分成左右两部分
        	//右半部分和左半部分乘积
            let multi=arrMax[j]*arrMax[i-j]
            max=Math.max(multi,max)
        }
        arrMax[i]=max//最大值记录
    }
    max=arrMax[number]
    return max
    
}
  1. 贪心算法

思路:如果超过5的话,那么其实都拆分成了3 和 2 因为3(n-3)>n,3(n-3)>=2(n-2) 所以我们全部拆分成3 或者 2 如果是10,那么不能拆分成3 3 3 1 而要拆分成 3 3 2 2

代码语言:javascript
复制
function cutRope(number)
{
    // write code here
    if(number<=3){
        return number-1
    }
    let countOf3=~~(number/3)
    if(number-countOf3*3==1){
        countOf3--
    }
    let countOf2=~~((number-countOf3*3)/2)
    return Math.pow(3,countOf3)*Math.pow(2,countOf2)
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档