当前位置: 首页 > news >正文

数论补充 之 前后缀分解问题

文章目录

  • [0,i-1] 和 [i+1,n-1] 共同作用
    • 3334,数组的最大因子得分
    • 238.除自身以外数组的乘积

对于前缀分解问题,我愿把它分为几个大问题:[0,i] 或 [i,n-1] 或 [l,r],或 [0,i-1] 和 [i+1,n-1] 共同作用的问题

一般都是求解区间的和,乘积,GCD,LCM

[0,i-1] 和 [i+1,n-1] 共同作用

3334,数组的最大因子得分

3334,数组的最大因子得分

在这里插入图片描述

思路分析:对于这题,首先我们得知道 GCD(a,b,c)= GCD(GCD(a,b),c), LCM(a,b,c) = LCM(LCM(a,b),c)
知道了上面的那个性质之后,我们就应该想到可以使用前后缀分解来完成这个题目,我们 只要记录 nums[i] 前面和后面的各自的前缀和后缀的 GCD 和 LCM 这样我们移除 nums[i] 之后的 GCD和 LCM 就分别是 pregcd[0:i-1] ,sufgcd[i+1,n-1] 以及 prelcm[0:i-1] , suflcm[i+1,n-1]

class Solution:
    def maxScore(self, nums: List[int]) -> int:
        # 至多移除1个元素,那么总共会有n+1种可能也就是101种可能而已
        # 分别使用pregcd,prelcm,sufgcd,suflcm
        n = len(nums)
        # 注意这个区间的开长了,lcm(1,x)= x,gcd(0,x) = x
        pregcd ,prelcm, sufgcd,suflcm = [0]*(n+1),[0]*(n)+[1],[0]*(n+1),[0]*(n)+[1]
        # 先求解前缀的情况
        def lcm(a,b):
            return a*b // math.gcd(a,b)

        for i in range(n):
            pregcd[i] = math.gcd(nums[i],pregcd[i-1])
            prelcm[i] = lcm(nums[i],prelcm[i-1])
        for i in range(n-1,-1,-1):
            sufgcd[i] = math.gcd(sufgcd[i+1],nums[i])
            suflcm[i] = lcm(suflcm[i+1],nums[i])
        # 不移除元素
        ans = pregcd[n-1]*prelcm[n-1]
        # 枚举移除元素
        for i in range(n):
            # 精髓在这
            ans = max(ans,math.gcd(pregcd[i-1],sufgcd[i+1])*lcm(prelcm[i-1],suflcm[i+1]))
        return ans

238.除自身以外数组的乘积

238.除自身以外数组的乘积

在这里插入图片描述

思路分析:还是采用前后缀分解的思路

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        # 相同的思路,采用前后缀分解来完成
        # 关键点,我们会把数组开长一点,这样就不用单独处理,否则就得处理第一个元素
        n = len(nums)
        prec,sufc = [1]*(n+1),[1]*(n+1)
        for i in range(n):
            prec[i] = prec[i-1]*nums[i]
        for i in range(n-1,-1,-1):
            sufc[i] = sufc[i+1]*nums[i]
        ans = [1]*n
        for i in range(n):
            ans[i] = prec[i-1]*sufc[i+1]
        return ans

相关文章:

  • Word 公式转 CSDN 插件 发布
  • 使用Node.js进行串口通信
  • 1.推荐算法基本概念
  • 基于Ceedling的嵌入式软件单元测试
  • Lineageos 22.1 aosp15 定制学习专栏介绍
  • MySQL无法连接到本地localhost的解决办法2024.11.8
  • DHCP协议概述
  • 【JS】实现一个hexo插件并发布
  • 相机姿态估计
  • SQL-leetcode—1527. 患某种疾病的患者
  • 1.【线性代数】——方程组的几何解释
  • springboot026在线文档管理系统
  • 深入剖析 Apache Shiro550 反序列化漏洞及复现
  • boss直聘登录 网易易盾 无感 滑块 分析
  • 本地DataGrip连接Linux服务器中MySQL失败处理方法
  • Nginx进阶篇 - nginx多进程架构详解
  • IGBT的两级关断
  • python导入模块的方式
  • 团结引擎 OpenHarmony 平台全面支持 UAAL,实现引擎能力嵌入原生应用
  • 把 DeepSeek1.5b 部署在显卡小于4G的电脑上
  • 学有质量、查有力度、改有成效,广大党员干部落实中央八项规定精神
  • 马上评丨上热搜的协和“4+4”模式,如何面对舆论审视
  • “五一”假期逛上海车展请提前购票,展会现场不售当日票
  • 笔墨如何“构城”?上海美院城市山水晋京展出
  • 民营经济促进法出台,自今年5月20日起施行
  • 逛了6个小时的上海车展。有些不太成熟的感受。与你分享。