2道。
1108. Defanging an IP Address
签到题。
string的insert函数。
1109. Corporate Flight Bookings
模板题。
树状数组,区间更新,单点查询。
但我居然连赤果果的模板题也…调了半个多小时。
1110. Delete Nodes And Return Forest
比赛的时候觉得好难,今天晚上又自己写出来了。
就是一个dfs。重点在于,只需要返回每个子树的根结点。把在删除map中的节点标记为null就好了。有个要注意的点在于,二叉树的参数要用 * & , 这样才能修改原二叉树。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<TreeNode*> ans;
vector<TreeNode*> delNodes(TreeNode* root, vector<int>& to_delete) {
map<int, int> mp;
int n = to_delete.size();
for (int i=0; i<n; ++i) {
mp[to_delete[i]] = 1;
}
dfs(root, mp, 1);
return ans;
}
void dfs(TreeNode* & root, map<int, int>& mp, bool flag) {
if (root == NULL) return;
if (mp[root->val]) {
dfs(root->left, mp, 1);
dfs(root->right, mp, 1);
root = NULL;
}else {
if (flag == 1) {
ans.push_back(root);
flag = 0;
}
dfs(root->left, mp, 0);
dfs(root->right, mp, 0);
}
}
};
1111. Maximum Nesting Depth of Two Valid Parentheses Strings
直接标记所有括号的层数。奇数和偶数分为两组就好了。
好简单。。。为什么我想的时候觉得好难好难。
代码:
class Solution {
public:
vector<int> maxDepthAfterSplit(string seq) {
int n = seq.length();
vector<int> ans(n, 0);
vector<int> dep(n, 0);
int cur = 0;
int max_ = 0;
for (int i=0; i<n; ++i) {
if (seq[i] == '(') {
cur++;
dep[i] = cur;
}else {
dep[i] = cur;
cur--;
}
max_ = max(max_, cur);
}
max_ /= 2;
for (int i=0; i<n; ++i) {
if (dep[i] <= max_) {
ans[i] = 0;
}else ans[i] = 1;
}
return ans;
}
};
今天又是什么都没干的一天。
开始放暑假了可还行。开学就研二了呢。
多看论文,刷题,多写代码。
做一个养生女孩。