题解 | #剪绳子#

剪绳子

http://www.nowcoder.com/practice/57d85990ba5b440ab888fc72b0751bf8

思路: 前三个数定义在dp方程当中,之后元素存储的是之前每一段的剪的最大值,因为之前的最大值已将放到数组当中,只需要进行调用就可以,因为题目并没有要求剪几段,可以是多段,只要有最大值就可以。

import java.util.*;
public class Solution {
    public int cutRope(int length) {
//参考https://wangwenqiang.blog.csdn.net/article/details/83184146?spm=1001.2101.3001.6650.1&depth_1-utm_relevant_index=2
//  if (length < 2) {
//             return 0;
//         }
//         if (length==2){return 1;}
//         if(length==3){return  2;}

//         //定义一个存放>=4 长度的数组 ,对>=4长度的最大的乘积进行临时存储
//         int[] products=new int[length+1];
//         products[1]=1;
//         products[2]=2;
//         products[3]=3;
//         for (int i = 4; i <=length; i++) {
//             int max=0;
//             for (int j = 1; j <=i/2; j++) {
//                 int product=products[j]*products[i-j];
//                 if (product>max){
//                     products[i]=product; }
//             }
        //差了一步
//         }
//         return    products[length];
        
         //长度小于2 无法分割
        if(length<2)
            return 0;
        //长度等于2 一分为二 1*1
        if(length==2)
            return 1;
        //长度等于3 最大为1*2=2
        if(length==3)
            return 2;
        //定义一个存放>=4 长度的数组 ,对>=4长度的最大的乘积进行临时存储
        int[] products=new int[length+1];
        //以下的前三个数组存放的不是最大值,而是长度值
        products[1]=1;
        products[2]=2;
        products[3]=3;
        for(int i=4;i<=length;i++) {
            int maxModify=0;
            for(int j=1;j<=i/2;j++) {
                int product=products[j]*products[i-j];
                if(product>maxModify)
                    maxModify=product;
            }    
            //得到f(i)的最优解
            products[i]=maxModify;
        }    
        //返回发f(n)
        return products[length];
     
    }
}
全部评论

相关推荐

不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
06-12 16:23
已编辑
小米_软件开发(准入职员工)
点赞 评论 收藏
分享
07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务