leetcode 823 带因子的二叉树

用动态规划

如果两个节点值不同,要乘2,因为两个节点可以互换位置

dp[i] = dp[left] * dp[right] * 2

如果相同

dp[i] = dp[left] * dp[right]

java 复制代码
class Solution {
    public int numFactoredBinaryTrees(int[] arr) {
        Arrays.sort(arr);
        int n = arr.length;
        long[] dp = new long[n];
        long res = 0, mod = 1000000007;
        for (int i = 0; i < n; i++) {
            dp[i] = 1;
            for (int left = 0, right = i - 1; left <= right; left++) {
                while (right >= left && (long) arr[left] * arr[right] > arr[i]) {
                    right--;
                }
                if (right >= left && (long) arr[left] * arr[right] == arr[i]) {
                    if (right != left) {
                        dp[i] = (dp[i] + dp[left] * dp[right] * 2) % mod;
                    } else {
                        dp[i] = (dp[i] + dp[left] * dp[right]) % mod;
                    }
                }
            }
            res = (res + dp[i]) % mod;
        }
        return (int) res;
    }
}
相关推荐
_OLi_4 分钟前
力扣 LeetCode 347. 前K个高频元素(Day5:栈与队列)
算法·leetcode·职场和发展
LabVIEW开发10 分钟前
LabVIEW开发相机与显微镜自动对焦功能
算法·计算机视觉·labview知识
秀儿还能再秀14 分钟前
支持向量机SVM——基于分类问题的监督学习算法
算法·机器学习·支持向量机·学习笔记
single59424 分钟前
【c++笔试强训】(第五篇)
java·开发语言·c++·vscode·学习·算法·牛客
席万里1 小时前
Golang超详细入门教程
算法·golang
小馒头学python2 小时前
机器学习中的概率超能力:如何用朴素贝叶斯算法结合标注数据做出精准预测
人工智能·python·算法·机器学习
是阿建吖!2 小时前
【优选算法】双指针
c语言·c++·算法
清酒伴风(面试准备中......)2 小时前
计算机网络基础——针对实习面试
计算机网络·面试·职场和发展
原来是猿3 小时前
类和对象(上)
c语言·开发语言·数据结构·c++·算法
qq_434085903 小时前
Day 65 || SPFA、判断负权回路、bellman_ford之单源有限最短路
算法