LeetCode Weekly Contest 258
整体难度偏简单,最后一题想太久了,应该很快可以解决的
T1: Reverse Prefix of Word
找到第一个对应的字符,然后将前面的字符串反转即可
T2: Number of Pairs of Interchangeable Rectangles
通过最大公约数来处理每个长方形的比例,然后用最大公约数处理后的比例来计算, 通过Map快速计算
T3: Maximum Product of the Length of Two Palindromic Subsequences
因为长度只有12,所以通过状态压缩找出所有可行的回文串,然后判断两个回文串是否 有交集,没有求长度之积的最大数
T4: Smallest Missing Genetic Value in Each Subtree
详细见代码,可能需要证明时间复杂度问题, 对于结点I,找到结点I所有子节点的MissValue,找出最大的MissValue,然后进行推计算新 的MissValue
class Solution {
private int[] ans;
private int[] fn;
private List<List<Integer>> tree;
private int[] nums1;
private int nodeIdx;
private int search(int root, int rec) {
int pos = 1;
for(int next : tree.get(root)) {
pos = Math.max(pos, search(next, nodeIdx));
}
nodeIdx++;
fn[nums1[root]] = nodeIdx;
while(fn[pos]!=0 && fn[pos]>rec && fn[pos]<=nodeIdx) {
pos++;
}
ans[root] = pos;
return pos;
}
public int[] smallestMissingValueSubtree(int[] parents, int[] nums) {
int n = parents.length;
this.ans = new int[n];
this.fn = new int[100010];
this.tree = new ArrayList<>();
this.nums1 = nums;
for(int idx=0;idx<n;idx++) {
tree.add(new ArrayList<>());
}
for (int idx=1;idx<n;idx++) {
tree.get(parents[idx]).add(idx);
}
this.nodeIdx = 0;
search(0,0);
return ans;
}
}