LCR 174. 寻找二叉搜索树中的目标节点
时间:
8:12~18:18 自己AC
8:18-8:30 看答案
思路:中序遍历放到一个数组里,再找第cnt大的
缺点:空间效率为O(N)
//中序遍历放到一个数组里,再找第cnt大的
class Solution {
public:
void inorder(vector<int>&v,TreeNode* r)
{
if(r==NULL) return ;
inorder(v,r->left);
v.push_back(r->val);
inorder(v,r->right);
}
int findTargetNode(TreeNode* root, int cnt) {
vector<int> v;
inorder(v,root);
return v[v.size()-cnt];
}
};
答案思路:中序倒序第k大的,则先右,中,左,用一个变量记录第几个,到第k个的时候,返回值,并return。
看了思路后自己写的:
没有在k为0的时候返回
class Solution {
public:
void inorder(TreeNode* r,int&k,int&res)
{
if(r==NULL) return ;
inorder(r->right,k,res);
k--;
if(k==0)
res=r->val;
inorder(r->left,k,res);
}
int findTargetNode(TreeNode* root, int cnt) {
vector<int> v;
int res=-1;
inorder(root,cnt,res);
return res;
}
};
答案:用了全局变量记录每一次递归的k
class Solution {
int res, k;
public int kthLargest(TreeNode root, int k) {
this.k = k;
dfs(root);
return res;
}
void dfs(TreeNode root) {
if(root == null) return;
dfs(root.right);
if(k == 0) return;
if(--k == 0) res = root.val;//注意这里!
dfs(root.left);
}
}
作者:Krahets
链接:https://leetcode.cn/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/solutions/184216/mian-shi-ti-54-er-cha-sou-suo-shu-de-di-k-da-jie-d/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
LCR 148. 验证图书取出顺序
时间:
8:33~9:30 没看懂题,看答案
看了剑的书写的,不对
class Solution {
public:
bool validateBookSequences(vector<int>& putIn, vector<int>& takeOut) {
stack<int> st;
int j=0;
st.push(putIn[j]);
for(int i=0;i<takeOut.size();)
{
if(st.top()==takeOut[i])
{
st.pop();
i++;
}
else
{
int k;
for( k=j;k<putIn.size()&&putIn[k]!=takeOut[i];k++)
{
st.push(putIn[k]);
}
if(k==putIn.size())
return false;
}
}
return true;
}
};
看答案:
思路:使用辅助栈进行模拟,按照进栈的顺序进辅助栈,进一个就判断是否与出栈顺序第一个相同,相同则出栈,不相同则继续进展,如果最后栈是空的,说明出栈完毕,是正确顺序;如果没有出栈完毕,则不是正确顺序。
class Solution {
public:
bool validateBookSequences(vector<int>& putIn, vector<int>& takeOut) {
stack<int> st;
int j=0;
for(int i=0;i<putIn.size();i++)
{
st.push(putIn[i]);
while(!st.empty()&&st.top()==takeOut[j])
{
st.pop();
j++;
}
}
return st.empty();
}
};