Codenation 面试经历 | DS-算法回合
Q1:从一个大小为 n 的数组中可能有多少个集合,使得集合中的每个数字都除以集合中的连续数字。您只能在特定集合中使用一个值一次。
方法:对输入数组进行排序,在输入数组中迭代,遍历 A[i] 的除数,将 dp[divsors] 添加到 dp[A[i]]
边缘情况:当数组包含零时,不要遍历零,答案将为 2*ans+1
Q2:给定一棵树。信号在时间 t=0 从根开始,每秒每个具有信号的节点都可以将其传递给它的一个子节点并且信号持续存在,计算树中所有节点都将具有信号的最小时间。
方法:可以用dfs+dp解决,如果一个节点的所有子节点的答案都按降序排序,则该节点的答案最大为(ans[child]+i+1, ans[node]) ,其中 i 是子节点的索引,叶节点的答案将是 1 作为基本情况。