标签:思路 -- 需要 treenode 一个 ++ 删除 之间 sap
RT太菜了,只做出前3题,hard永远做不出来
给你一个目标数组 target 和一个整数 n。每次迭代,需要从? list = {1,2,3..., n} 中依序读取一个数字。
请使用下述操作来构建目标数组 target :
Push:从 list 中读取一个新元素, 并将其推入数组中。
Pop:删除数组中的最后一个元素。
如果目标数组构建完成,就停止读取更多元素。题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。请返回构建目标数组所用的操作序列。题目数据保证答案是唯一的。
直接一次遍历,只存在两种情况,当前num=target[index]或者当前num<target[index],因为num是从1开始增加的,而target数组第一个元素target[0]是大于等于1的数,我们只需要遍历完target数组即可
class Solution {
public List<String> buildArray(int[] target, int n) {
ArrayList<String> ans=new ArrayList<>();
if(target==null||target.length==0||n==0)return ans;
int index=0,num=1;
while(index<=target.length-1){
if(target[index]==num){
ans.add("Push");
num++;
index++;
}else{
ans.add("Push");
ans.add("Pop");
num++;
}
}
return ans;
}
}
a==b可以转成ab==0,然后就相当于arr[i]...^arr[k],然后i和k不相等,如果出现成立,j的位置可取可能有k-i
class Solution {
public int countTriplets(int[] arr) {
if(arr==null||arr.length==0)return 0;
int ans=0;
for(int i=0;i<arr.length-1;i++){
int sum=0;
for(int k=i+1;k<arr.length;k++){
for(int j=i;j<=k;j++){
sum^=arr[j];
}
if(sum==0)ans+=k-i;
sum=0;
}
}
return ans;
}
}
给你一棵有?n?个节点的无向树,节点编号为?0?到?n-1?,它们中有一些节点有苹果。通过树上的一条边,需要花费 1 秒钟。你从?节点 0?出发,请你返回最少需要多少秒,可以收集到所有苹果,并回到节点 0 。无向树的边由?edges?给出,其中?edges[i] = [fromi, toi]?,表示有一条边连接?from?和?toi 。除此以外,还有一个布尔数组?hasApple ,其中?hasApple[i] = true?代表节点?i?有一个苹果,否则,节点?i?没有苹果。
很简单的思想,只要有一个节点是苹果,那么我们就让他老爸变苹果然后ans+=2,因为edges数组是根据树层次遍历构造的,且每个节点都在edges[i][1]只出现一次,所以我们逆序遍历,因为叶子节点一定在edges数组的末尾,每遍历到一个节点如果是苹果,我们就将它父亲节点也设成true,然后ans+2,这里可能父亲节点本来就是true,但是我们不管,依旧set。
class Solution {
public int minTime(int n, int[][] edges, List<Boolean> hasApple) {
if(n==0||edges.length==0||hasApple.size()==0)return 0;
int ans=0;
for(int i=edges.length-1;i>=0;i--){
if(hasApple.get(edges[i][1])==true){
hasApple.set(edges[i][0],true);
ans+=2;
}
}
return ans;
}
}
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null)return null;
if(root==p||root==q)return (root==p)?p:q;
TreeNode left=lowestCommonAncestor(root.left,p,q);
TreeNode right=lowestCommonAncestor(root.right,p,q);
if(left!=null&&right!=null) return root;
return (left==null)?right:left;
}
}
标签:思路 -- 需要 treenode 一个 ++ 删除 之间 sap
原文地址:https://www.cnblogs.com/k-will/p/12863107.html