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。

相关推荐
Cccp.1238 小时前
【leetcode】(十四)从暴力递归到动态规划
数据结构·算法·leetcode·动态规划
?abc!1 天前
(动态规划+DFS)494. 目标和
算法·深度优先·动态规划
大陈子编程1 天前
C++ 背包九讲:从入门到精通的动态规划专题
开发语言·c++·动态规划
lvwangshu2 天前
CF1882D Tree XOR 题解
动态规划·题解·贪心·dp·树形dp·换根dp·性质题·思维好题·推导题
Interview Aid1122 天前
Snowflake OA 面试真题:前缀和、BFS 与动态规划
面试·动态规划·宽度优先
wzdark5 天前
动态规划算法的状态转移矩阵可视化分析5
算法·矩阵·动态规划
所以遗憾是什么呢?6 天前
【题解】Educational Codeforces Round 195 (Rated for Div. 2) ABCDE
c++·动态规划·acm·icpc·ccpc·xcpc·codeforecs
lvwangshu6 天前
川剧复演 题解
动态规划·题解·技巧·性质题·思维好题
All for pursuit.7 天前
【动态规划-21】312.戳气球
数据结构·c++·算法·leetcode·动态规划
y1su7 天前
Leetcode 动态规划 模板
java·数据结构·算法·leetcode·动态规划