首页 > 其他分享 >剪绳子问题 之动态规划 及 大数越界情况下的求余问题

剪绳子问题 之动态规划 及 大数越界情况下的求余问题

时间:2023-02-17 20:12:15浏览次数:48  
标签:return 大数 int 绳子 越界 rem 求余 dp mod

问题:剪绳子剑指 Offer 14- I. 剪绳子 - 力扣(LeetCode)

思路一:数学推导:分割大小为3时 ,是最优解,2 次之;  /3 作为幂次,   %3 作为分解到最后特化处理;

    特殊化处理:当分解到剩1的时候,取出一个3和这个1,组成4,分解成2*2,此时值最大化;

          当分解到剩2的时候,就×2;

          当分解到剩0的时候,全部能幂次

时间复杂度 、 空间复杂度 都为 O(1);

class Solution {
public:
    int cuttingRope(int n) {
        if(n == 2) return 1;
        if(n == 3) return 2;
        int i = n/3,j = n%3;
        if(j == 1) return pow(3,i-1)*4;
        if(j == 0) return pow(3,i);
        if(j == 2) return pow(3,i)*2;
        return 0;
    }
};

思路二:贪心算法、动态规划

     通过观察,所有最优分解都包含2或者3;那么递推基定义完后,

时间复杂度、空间复杂度:O(N)

class Solution {
public:
    int cuttingRope(int n) {
        int dp[100];
        dp[1]=1;
        dp[2]=2;
        dp[3]=3;
        if(n==2)
            return 1;
        if(n==3)
            return 2;for(int i=4;i<=n;i++){
            dp[i] = max(2*dp[i-2], 3*dp[i-3]);
        }
        return dp[n];
     }
};

问题:上述问题,可能超出int32 的上限,导致返回错误,大数求余解法:面试题14- II. 剪绳子 II(数学推导 / 贪心思想 + 快速幂求余,清晰图解) - 剪绳子 II - 力扣(LeetCode)

方法一:循环求余;O(N)

    保证每轮中间值都在范围内,依次取余;

class Solution {
public:
    int cuttingRope(int n) {
        if(n == 2) return 1;
        if(n == 3) return 2;
        int mod = 1000000007;
        long res=1;
        while(n>4){
            res = res*3%mod;
            n -= 3;
        }
        return n*res%mod;//n=4
    }
};

方法二: 快速幂取余 O(log N)

    也就是二分取余,每次让 a/=2;n为绳子长,3是最优解, a = n/3-1 是让指数向下取整并且再减一,应对 余数b为 1、2的情况(上述的特殊化处理);

    此时,a要分奇偶两种情况, 偶数:则执行 x2运算,并且取余;

    奇数:则 执行×3 运算,并取余,再执行x2运算;

class Solution {
public:
    int cuttingRope(int n) {
        if(n == 2) return 1;
        if(n == 3) return 2;
        int mod = 1000000007;
        int b = n%3;
        long rem = 1,x = 3;
        for(int a = n/3-1;a > 0;a /= 2){
            if(a % 2 == 1) rem = (rem*x)%mod;//奇数
            x = (x*x)%mod;//偶数
        }
        if(b == 1) return rem*4%mod;//n=4
        if(b == 0) return rem*3%mod; //n=6
        if(b == 2) return rem*6%mod;//n=5
        return 0;
    }
};

 

 

    

标签:return,大数,int,绳子,越界,rem,求余,dp,mod
From: https://www.cnblogs.com/xuan01/p/17131401.html

相关文章

  • 【大数据架构之旅】1 深入理解 CDC
    CDC=ChangeDataCapture,是一种用以掌控数据变化的软件架构(或者再通俗一点:技术思路)。具体架构/思想背后会有不同的工程实现思路,本文我们就来深入理解一下。更新历史2......
  • 开学测试——电子商务大数据分析
    一、测试要求:1、数据采集(要求至少爬取三千条记录,时间跨度超过一星期):(10分)要求Python编写程序爬取京东手机的评论数据,生成Json形式的数据文件。京东商城部分数据格式如......
  • 中电金信Gien享汇・大数据专题|从数据分析视角看零售客户经营
    本期嘉宾符永钰中电金信数据分析和管理咨询专家中国澳门大学,管理学硕士曾任职IBMGBS、IMSHealth等多家大型公司近10年跨国跨行业的数据分析和管理咨询从业经验专注于数据......
  • 中电金信Gien享汇・大数据专题|金融数字化转型与数据应用
    本期嘉宾杨悦中电金信商业分析事业部副总经理毕业于哈尔滨工业大学,曾供职于华胜天成、东南融通公司。金融数据领域孜孜追求者,专注于金融行业数据平台、数据治理、数据应用......
  • 大数据常用命令
    一、Zookeeper服务端启动:zkServer.shstart二、MySQL三、Hadoop四、Hive五、Spark六、Flink七、Kafka八、HBase九、Phoenix十、Redis十一、Mongo十二、ELK......
  • 关于“档案大数据”的非主流看法
    近日,反复拜读了前国家档案局局长杨冬权先生今年6.9档案日的大作《从“选时代”到“全时代”——智慧社会档案工作的历史性转折》,作为档案信息化从业者那真是倍感振奋,壮怀激......
  • 实力获评,MobTech袤博科技再度入围上海市优质大数据服务供应商目录
    近日,上海市经济和信息化委员会发布了“2022年度上海市优质大数据服务供应商目录”,MobTech袤博科技与移动、联通、万达信息、第一财经等知名企业共同入选。这也是继2020年入......
  • 大数据实时分析
    随着线上业务迅猛发展,摸着“数据”过河,小步快跑推动了企业“实时”需求的升级。在很多线上场景中,实时性成为了提升企业竞争力的核心手段。但是目前的湖、仓、或者湖仓分体......
  • 中电金信Gien享汇・大数据专题|金融创新应用场景下的数据资产管理实践
    本期嘉宾张忠梅商业分析事业部华东区总经理毕业于复旦大学MBA专业,深耕金融行业商业智能领域16年,专注于金融机构数据服务体系的咨询及落地,服务过工商银行、交通银行、平安银......
  • 谈一谈大数据技术
     忽如一夜春风来,无人不谈大数据。大数据就像前两年的云计算一样,是一个时下被炒得很火的概念。那么什么是大数据,大数据是如何定义的,大数据处理技术有哪些,大数据能给我们带......