C++ 动态规划与贪心,两种解法

剪绳子

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

1.贪心
贪心选择为3 (经过数学推理证明)
时间复杂度:O(1)
空间复杂度:O(1)

class Solution {
public:
    int cutRope(int number) 
    {
        if(number <= 3)    return number-1;
        int cnt = number/3;

        if(number%3 == 0)    return pow(3, cnt);
        else if(number%3 == 1)    return pow(3, cnt-1)*4;
        else    return pow(3, cnt)*2;
    }
};

2.动态规划
时间复杂度:O(N2)
空间复杂度:O(N)

​class Solution {
public:
    int cuttingRope(int n) 
    {
        if(n == 2) return 1;
        if(n == 3) return 2;

        int* dp = new int[n+1];
        dp[2] = 2;
        dp[3] = 3;

        int maxCut;
        for(int i=4; i<=n; ++i)
        {
            maxCut = 0;
            for(int j=2; j<=i/2; ++j)
            {
                maxCut = max(maxCut, dp[i-j]*dp[j]);
                dp[i] = maxCut;
            }
        }
        return dp[n];
    }
};
全部评论

相关推荐

安静的鲸鱼offer...:神仙级别hr,可遇不可求,甚至他可能也是突然有感而发。只能说遇上是件幸事。
秋招开始捡漏了吗
点赞 评论 收藏
分享
一只乌鸦:这不才9月吗,26到明年毕业前能一直找啊,能拿下提前批,转正的,offer打牌的都是有两把刷子的,为什么非要跟他们比。如果别人是9本硕+金牌+好几段大厂实习呢?如果别人是双非通天代呢?如果别人是速通哥呢?,做好自己就行了,我们做不到他们一样提前杀死比赛,但晚点到终点也没啥关系吧
双非应该如何逆袭?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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