Weekly Contest 131
1021. Remove Outermost Parentheses
A valid parentheses string is either empty
(""),"(" + A + ")", orA + B, whereAandBare valid parentheses strings, and+represents string concatenation. For example,"","()","(())()", and"(()(()))"are all valid parentheses strings.A valid parentheses string
Sis primitive if it is nonempty, and there does not exist a way to split it intoS = A+B, withAandBnonempty valid parentheses strings.Given a valid parentheses string
S, consider its primitive decomposition:S = P_1 + P_2 + ... + P_k, whereP_iare primitive valid parentheses strings.Return
Safter removing the outermost parentheses of every primitive string in the primitive decomposition ofS.
Example 1:
Input: "(()())(())"
Output: "()()()"
Explanation:
The input string is "(()())(())", with primitive decomposition "(()())" + "(())".
After removing outer parentheses of each part, this is "()()" + "()" = "()()()".Example 2:
Input: "(()())(())(()(()))"
Output: "()()()()(())"
Explanation:
The input string is "(()())(())(()(()))", with primitive decomposition "(()())" + "(())" + "(()(()))".
After removing outer parentheses of each part, this is "()()" + "()" + "()(())" = "()()()()(())".Example 3:
Input: "()()"
Output: ""
Explanation:
The input string is "()()", with primitive decomposition "()" + "()".
After removing outer parentheses of each part, this is "" + "" = "".
Note:
S.length <= 10000S[i]is"("or")"Sis a valid parentheses string
Approach #1: Stack. [C++]
class Solution {
public:
string removeOuterParentheses(string S) {
stack<char> sta;
int left = 0, right = 0;
string ans = "";
for (int i = 0; i < S.length(); ++i) {
if (sta.empty()) {
right = i - 1;
if (right - left - 1 >= 2) {
string s = S.substr(left+1, right-left-1);
ans += s;
}
left = i;
sta.push(S[i]);
} else {
if (sta.top() == '(' && S[i] == ')') {
sta.pop();
} else {
sta.push(S[i]);
}
}
}
string s = S.substr(left+1, S.length()-left-2);
ans += s;
return ans;
}
};
1022. Sum of Root To Leaf Binary Numbers
Given a binary tree, each node has value
0or1. Each root-to-leaf path represents a binary number starting with the most significant bit. For example, if the path is0 -> 1 -> 1 -> 0 -> 1, then this could represent01101in binary, which is13.For all leaves in the tree, consider the numbers represented by the path from the root to that leaf.
Return the sum of these numbers.
Example 1:
Input: [1,0,1,0,1,0,1]
Output: 22
Explanation: (100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22
Note:
- The number of nodes in the tree is between
1and1000.- node.val is
0or1.- The answer will not exceed
2^31 - 1.
Approach #1: [C++]
/**
* 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:
int sumRootToLeaf(TreeNode* root, int val = 0) {
const static int mod = 1000000007;
if (!root) return 0;
val = val * 2 + root->val;
return (root->left == root->right ? val : sumRootToLeaf(root->left, val) + sumRootToLeaf(root->right, val)) % mod;
}
};
1023. Camelcase Matching
A query word matches a given
patternif we can insert lowercase letters to the pattern word so that it equals thequery. (We may insert each character at any position, and may insert 0 characters.)Given a list of
queries, and apattern, return ananswerlist of booleans, whereanswer[i]is true if and only ifqueries[i]matches thepattern.
Example 1:
Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FB"
Output: [true,false,true,true,false]
Explanation:
"FooBar" can be generated like this "F" + "oo" + "B" + "ar".
"FootBall" can be generated like this "F" + "oot" + "B" + "all".
"FrameBuffer" can be generated like this "F" + "rame" + "B" + "uffer".Example 2:
Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBa"
Output: [true,false,true,false,false]
Explanation:
"FooBar" can be generated like this "Fo" + "o" + "Ba" + "r".
"FootBall" can be generated like this "Fo" + "ot" + "Ba" + "ll".Example 3:
Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBaT"
Output: [false,true,false,false,false]
Explanation:
"FooBarTest" can be generated like this "Fo" + "o" + "Ba" + "r" + "T" + "est".
Note:
1 <= queries.length <= 1001 <= queries[i].length <= 1001 <= pattern.length <= 100- All strings consists only of lower and upper case English letters.
Approach #1: [C++]
class Solution {
public:
vector<bool> camelMatch(vector<string>& queries, string pattern) {
vector<bool> res;
for (int i = 0; i < queries.size(); ++i) {
res.push_back(judge(queries[i], pattern));
}
return res;
}
private:
bool judge(string str, string pattern) {
int pnt = 0;
for (int i = 0; i < str.length(); ++i) {
if (str[i] == pattern[pnt]) pnt++;
else if (islower(str[i])) continue;
else return false;
}
return pnt == pattern.length();
}
};
1024. Video Stitching
You are given a series of video clips from a sporting event that lasted
Tseconds. These video clips can be overlapping with each other and have varied lengths.Each video clip
clips[i]is an interval: it starts at timeclips[i][0]and ends at timeclips[i][1]. We can cut these clips into segments freely: for example, a clip[0, 7]can be cut into segments[0, 1] + [1, 3] + [3, 7].Return the minimum number of clips needed so that we can cut the clips into segments that cover the entire sporting event (
[0, T]). If the task is impossible, return-1.
Example 1:
Input: clips = [[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]], T = 10
Output: 3
Explanation:
We take the clips [0,2], [8,10], [1,9]; a total of 3 clips.
Then, we can reconstruct the sporting event as follows:
We cut [1,9] into segments [1,2] + [2,8] + [8,9].
Now we have segments [0,2] + [2,8] + [8,10] which cover the sporting event [0, 10].Example 2:
Input: clips = [[0,1],[1,2]], T = 5
Output: -1
Explanation:
We can't cover [0,5] with only [0,1] and [0,2].Example 3:
Input: clips = [[0,1],[6,8],[0,2],[5,6],[0,4],[0,3],[6,7],[1,3],[4,7],[1,4],[2,5],[2,6],[3,4],[4,5],[5,7],[6,9]], T = 9
Output: 3
Explanation:
We can take clips [0,4], [4,7], and [6,9].Example 4:
Input: clips = [[0,4],[2,8]], T = 5
Output: 2
Explanation:
Notice you can have extra video after the event ends.
Note:
1 <= clips.length <= 1000 <= clips[i][0], clips[i][1] <= 1000 <= T <= 100
Approach #1: [C++]
class Solution {
public:
int videoStitching(vector<vector<int>>& clips, int T) {
int n = clips.size();
sort(clips.begin(), clips.end(), [](vector<int>& u, vector<int>& v) {
return u[1] < v[1];
});
vector<int> dp(n+1, 0);
int ret = INF;
for (int i = 0; i < n; ++i) {
dp[i] = (clips[i][0] == 0) ? 1 : INF;
for (int j = 0; j < i; ++j) {
if (clips[j][1] >= clips[i][0]) {
dp[i] = min(dp[j] + 1, dp[i]);
}
}
}
for (int i = 0; i < n; ++i) {
if (clips[i][1] >= T)
ret = min(dp[i], ret);
}
return (ret == INF) ? -1 : ret;
}
private:
const int INF = 1 << 30;
};
Weekly Contest 131的更多相关文章
- LeetCode Weekly Contest 8
LeetCode Weekly Contest 8 415. Add Strings User Accepted: 765 User Tried: 822 Total Accepted: 789 To ...
- Leetcode Weekly Contest 86
Weekly Contest 86 A:840. 矩阵中的幻方 3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等. 给定一个 ...
- leetcode weekly contest 43
leetcode weekly contest 43 leetcode649. Dota2 Senate leetcode649.Dota2 Senate 思路: 模拟规则round by round ...
- LeetCode Weekly Contest 23
LeetCode Weekly Contest 23 1. Reverse String II Given a string and an integer k, you need to reverse ...
- LeetCode之Weekly Contest 91
第一题:柠檬水找零 问题: 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 ...
- LeetCode Weekly Contest
链接:https://leetcode.com/contest/leetcode-weekly-contest-33/ A.Longest Harmonious Subsequence 思路:hash ...
- LeetCode Weekly Contest 47
闲着无聊参加了这个比赛,我刚加入战场的时候时间已经过了三分多钟,这个时候已经有20多个大佬做出了4分题,我一脸懵逼地打开第一道题 665. Non-decreasing Array My Submis ...
- 75th LeetCode Weekly Contest Champagne Tower
We stack glasses in a pyramid, where the first row has 1 glass, the second row has 2 glasses, and so ...
- LeetCode之Weekly Contest 102
第一题:905. 按奇偶校验排序数组 问题: 给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素. 你可以返回满足此条件的任何数组作为答案. 示例: 输入: ...
随机推荐
- 让php支持多线程,win下安装pthreads
1.检查PHP版本是否支持线程安全 在phpinfo()的显示页中,搜索Thread Safety,如果是enabled,则PHP版本是线程安全的. 2.在http://windows.php.net ...
- DLL另類劫持注入法
// Win32Project2.cpp : 定义 DLL 应用程序的导出函数. // //////////////////////////////////////////////////////// ...
- phpstorm2018.3的安装和激活和汉化
安装 第一步:解压并打开文件,运行安装程序,点击Next进入下一步, 第二步:选择软件安装目录,自定义选择安装根目录--> 注意!后面还需要找安装目录里的文件,所以记住安装到一个比较容易查看的目 ...
- Scrum 项目1.0--软件工程
1.确定选题 视频:http://v.youku.com/v_show/id_XMTU1OTExOTY2NA==.html 2.需求分析调查 地址:http://www.sojump.com/m/81 ...
- 最近学习工作流 推荐一个activiti 的教程文档
全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...
- pageX/pageY,screenX/screenY,clientX/clientY的差别
pageX/pageY,screenX/screenY,clientX/clientY的差别 $(document).click(function(e){ //x方向无差别 //alert(e.pag ...
- 【Linux】Memcached安装
Memcached概念 Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中, ...
- 流程控制 if while for 已及数字类型 进制转换
一:if 语句 语法一:ifif 条件: code1 code1 code1 语法二:if ...else ... if 条件: code1 code1 code1else: code1 code1 ...
- 2018.09.28 牛客网contest/197/B面积并(二分+简单计算几何)
传送门 比赛的时候把题目看成求面积交了,一直没调出来. 下来发现是面积并气的吐血. 码了一波发现要开long double. 然而直接用现成的三角函数会挂. 因此需要自己手写二分求角度. 大致思路就是 ...
- 2018.07.10NOIP模拟 Knapsack(单调队列优化dp)
Knapsack 题目背景 SOURCE:NOIP2016-RZZ-4 T2 题目描述 有 n 个物品,第 i 个物品的重量为 ai . 设 f(i,j,k,l,m) 为满足以下约束的物品集合数量: ...
