zoukankan      html  css  js  c++  java
  • [LeetCode]Integer Break

    题目:Integer Break

    Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.

    For example, given n = 2, return 1 (2 = 1 + 1); given n = 10, return 36 (10 = 3 + 3 + 4).

    Note: You may assume that n is not less than 2 and not larger than 58.

    题意:将一个正整数分解成k个正整数的和的形式使得这些正整数的乘积最大,输出他们的积。

    思路:

    他更像一个数学题;

    首先什么样的数的乘积最大呢?

    如果是2,则不分解,它本身最大;

    如果是3,则不分解,它本身最大;

    如果是4,则不分解,它本身最大;

    如果是5,则分解成2和3,乘积是6最大;

    如果是6,则分解成3和3,乘积是9最大;

    ...

    到这里就可以看出来,分解成只有2和3的数的乘积是最大的,而且优先分解成3直到只剩下一个2,此时才是最优解。

    int integerBreak(int n){
        if (n < 2)return 0;
        if (n < 4)return n - 1;
        if (n == 4)return 4;
        int k = n / 3;
        if (n % 3 == 1){
            return 4 * pow(3, k - 1);
        }
        else if (n % 3 == 2){
            return 2 * pow(3, k);
        }
        return pow(3, k);
    }
  • 相关阅读:
    Elasticsearch:使用function_score及soft_score定制搜索结果的分数
    Elasticsearch:Elasticsearch中的refresh和flush操作指南
    Elasticsearch:top_hits aggregation
    Linux 容器的使用
    编译Linux内核
    GIT的使用
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
  • 原文地址:https://www.cnblogs.com/yeqluofwupheng/p/7350768.html
Copyright © 2011-2022 走看看