Leetcode 3566. Partition Array into Two Equal Product Subsets

  • [Leetcode 3566. Partition Array into Two Equal Product Subsets](#Leetcode 3566. Partition Array into Two Equal Product Subsets)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题我的实现还是比较暴力的,首先显而易见的,若要满足题目要求,则给出的数组的所有元素的乘积必然是target的平方,因此,我们可以快速由此判断该数组是否可分。

然后,在满足上述条件的前提下,我们就是要找到若干个元素使之乘积恰好为target,这个的话我们可以通过一个动态规划进行实现。

2. 代码实现

给出python代码实现如下:

python 复制代码
class Solution:
    def checkEqualPartitions(self, nums: List[int], target: int) -> bool:
        prod = 1
        for num in nums:
            prod *= num
        if prod != target * target:
            return False

        n = len(nums)
        @lru_cache(None)
        def dp(idx, tgt):
            if tgt == 1:
                return True
            if idx >= n:
                return False
            if tgt % nums[idx] == 0:
                return dp(idx+1, tgt) or dp(idx+1, tgt // nums[idx])
            else:
                return dp(idx+1, tgt)

        return dp(0, target)

提交代码评测得到:耗时7ms,占用内存18.5MB。

相关推荐
阿恩.7704 小时前
国际水电与电力能源期刊精选
经验分享·笔记·考研·动态规划·能源·制造
资深web全栈开发4 小时前
LeetCode 3573. 买卖股票的最佳时机 V - 动态规划解法详解
算法·leetcode·动态规划
xu_yule4 小时前
算法基础-动态规划
算法·动态规划
dyxal1 天前
动态规划:给“最优解”一张记住过去的备忘录
算法·动态规划·代理模式
长安er1 天前
LeetCode198打家劫舍:从回溯到动态规划的优化历程
算法·leetcode·动态规划·回溯·打家劫舍
scx201310041 天前
20251210 DP小测总结
c++·动态规划
李玮豪Jimmy2 天前
Day39:动态规划part12(115.不同的子序列、583.两个字符串的删除操作、72.编辑距离)
算法·动态规划
添加shujuqudong1如果未回复2 天前
三相逆变器VOC矢量控制电力电子Matlab仿真simulink之旅
动态规划
Learner__Q3 天前
每天五分钟:动态规划-LeetCode高频题_day2
算法·leetcode·动态规划
李玮豪Jimmy4 天前
Day37:动态规划part10(300.最长递增子序列、674.最长连续递增序列 、718.最长重复子数组)
算法·动态规划