由买买提看人间百态

topics

全部话题 - 话题: parenthese
首页 上页 1 2 3 4 5 6 7 下页 末页 (共7页)
m*********a
发帖数: 3299
1
不喜欢这种不直观的很难看懂的写法
你在遇到),准备pop的时候,看一下stack上对应位置是不是(
如果是,就pop,不是就push
最大值,就是当前i-pop后stack的index+1或i+1 when stack is empty.

来。
a***e
发帖数: 413
2
我不太明白你说的意思,你觉得易懂的写法是怎么样的?能贴出来参考一下么?
如果输入是(((())))((((()
h*******e
发帖数: 1377
3
楼主如果想做的话,做个四则运算的计算把。。做出来再做一个带括号的。我觉得这个
经常考,也不是特别经常但是作为难题倒是经常出现,而且twitter考过 解方程的,前
一阵一个版友的twitter面经就是这个。
m*********a
发帖数: 3299
4
int longestValidParentheses(string s) {
int max_length=0,length;
stack container;
for (int i=0;i if (s[i]=='('||container.empty()||s[container.top()]==')')
container.push(i);
else {
container.pop();
length=container.empty()?i+1:i-container.top();
if (length>max_length) max_length=length;
}
}
return max_length;
}
a***e
发帖数: 413
5
可能每个人想得不同,我咋觉得这种方法更复杂呢。每个符号都要push进去。
a***e
发帖数: 413
6
请问你说的是
Evaluate Reverse Polish Notation么?或者是类似的
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +, -, *, /. Each operand may be an integer or another
expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
其实一点都不想做题。特别是碰到要花很长时间才能做出来的题,气大得很啊。。。。
。。。。。
估计要等明年才敢出去面试啦。。。。。。。。
m*********a
发帖数: 3299
7
其实反过来写就跟清楚了
如果stack不空的化,
if (s[i]=='(' and s[stack.top()]==')')
container.pop();
length=container.empty()?i+1:i-container.top();
if (length>max_length) max_length=length;
其他的所有情况push stack
y***n
发帖数: 1594
h*******e
发帖数: 1377
9
这个也算,还有正常的四则式子的运算,我经常感觉脑子不够用了, 想到复杂的问题
多想一会儿就特累得休息然后再想~~~~
a***e
发帖数: 413
10
‘正常的四则式子的运算’是不是用arithmetic expression tree更好做?或者先把它
转换为RPN,再做。Data structure and algorithm 那本书上有解释怎么转换。。。。
。。。。
关于Evaluate Reverse Polish Notation,知道RPN的特点或者说evaluate RPN的算法后
,更像一道细节实现题。
我在OJ上错了就是因为记不清怎么把string变成char,还有没注意isdigit只判断1个符
号,遇到(-4)就没把它当负数了。
int evalRPN(vector &tokens) {

int n = tokens.size();

stack numbers;

for (int i=0; i {
int len = tokens[i].length();
char * tmp = new char [le... 阅读全帖
h*******e
发帖数: 1377
11
你写得挺好啊,我之前自己实现 atoi 了~~~ 还有自己写 intToStr了~~~ 看过你的发
现这些都不用啊, 代码由50多行缩到了25行 。正常四则运算的如果不带括号的就直接
一个stack就行, 如果带括号的需要2个stack 一个放 符号,一个放 数字。。带括号的
情况还挺复杂~~ 带括号的我还不会 提笔就写~~ 没怎么练过, 不带括号的倒是简单
一点。
我把我照你的改的也给贴上
class Solution {
public:
int evalRPN(vector &tokens) {
stack numStack;
for(int tokI = 0; tokI < tokens.size(); ++ tokI)
if(tokens[tokI] == "*" || tokens[tokI] == "+" || tokens[tokI] ==
"/" || tokens[tokI] == "-")
{
int val1 = numStac... 阅读全帖
a***e
发帖数: 413
d******1
发帖数: 18
13
我建了个q群。
欢迎正在刷cc150四版五版到童鞋们加入。
群号是205077190
h*******e
发帖数: 1377
14
mark
l*****a
发帖数: 14598
15
没细想,直接BFS就可以吧
你只能start from "("这个算root,
他的子节点可以是(( or ()
下一level可以是 ((( or (() or ()(
以此类推。只要number of "(" <= n, number of ")" <=number of "("
就可以插入Queue
最后...

combinations
l******e
发帖数: 54
16
一样思路改成递推就行了 空间是还可以优化的
class Solution {
public:
vector generateParenthesis(int n) {
vector f[n + 1][n + 1];
f[0][0] = vector {""};

for (int left = 0; left <= n; ++left) {
for (int right = 0; right <= left; ++right) {
for (const string& s : f[left][right]) {
if (left < n) {
f[left + 1][right].push_back(s + "(");
}
if (right < left) {
f[left][right + 1].push_back(s + ")");
}
... 阅读全帖
l******e
发帖数: 54
17
再上一个空间优化的吧
class Solution {
public:
vector generateParenthesis(int n) {
vector f[2][n + 1];
f[0][0] = vector {""};

for (int left = 0; left <= n; ++left) {
for (int right = 0; right <= left; ++right) {
f[(left + 1) & 1][right].clear();
for (const string& s : f[left & 1][right]) {
if (left < n) {
f[(left + 1) & 1][right].push_back(s + "(");
}
if (right < left) {
f[left & 1][rig... 阅读全帖
l******e
发帖数: 54
18
再来更多的空间优化好了
class Solution {
public:
vector generateParenthesis(int n) {
vector f[n + 1];
f[0] = vector {""};

for (int left = 0; left <= n; ++left) {
for (int right = 0; right <= left; ++right) {
for (int i = 0; i < f[right].size(); ++i) {
if (right < left) {
f[right + 1].push_back(f[right][i] + ")");
}
if (left < n) {
f[right][i] += "(";
}
}
}
}
retur... 阅读全帖
z**a
发帖数: 69
19
好角度,写了个,过了LC,差不多是非递归中序遍历二叉树的思路。
class Solution {
public:
class stack
{
public:
char c;
int flag;
stack(char c, int flag)
{
this->c = c;
this->flag = flag;
}
};
vector generateParenthesis(int n) {
int left = 0;
int right = 0;
vectorrecord;
vectorresult;
stack temp(0,0);
record.push_back(stack('(', 0));
le... 阅读全帖
m*********a
发帖数: 3299
20
大家很牛啊,想得清楚>2可能的非递归的
左右二种选择就比较难了非递归就比较难了
m**********e
发帖数: 22
21
我来贡献一个用queue的方法。C#写的:
// Iterative approach
public List generateParenthesisIter(int n)
{
Queue queue = new Queue(
);
queue.Enqueue(new ParenthesisWrapper("",0,0));
List result = new List();
while (queue.Count > 0)
{
ParenthesisWrapper curr = queue.Dequeue();
if (curr.left == n)
{
if ... 阅读全帖
m*****k
发帖数: 731
22
DP

combinations
l***s
发帖数: 15
23
贡献一个 python
class Solution:
# @param an integer
# @return a list of string
def generateParenthesis(self, n):
bs='()'
res=['()']
if n==0:
return ''
elif n==1:
return res
for i in range(2,n+1):
leres=len(res)
for j in range(leres):
base=res[0]
del res[0]
lebase=len(base)
for k in range(lebase+1):
new = base[0:k]+bs+b... 阅读全帖
N**********i
发帖数: 34
24
从7月份到现在,磕磕盼盼终于拿到了FB的offer,准备从了。就此做个总结,希望能对
还在找工作的朋友们有所帮助...
准备: lc(没刷完,但是有些高频题做了好几遍,还有水中的鱼的博客),cc150(先
刷了一遍,然后又看了好几遍,反复看了书中的一些不错的解法),g4g(稍稍做了一
些题),各大面经、版上大牛总结帖。我不是new grad(2年工作经验),所以简历上的
工作时的projects好好准备了一下。
整体感觉就是:
1. 被拒多半还是实力问题+少许运气问题。onsite interview最好保证每一轮都不差(
哪怕都没有很突出),否则就很容易悲剧。所以还是得要多做题甚至多面试找感觉
2. 最有用的是lc+面经+大牛总结,面试时至少有30%-50%会遇到类似甚至一样的
3. bug free很难做到,也没啥必要. 之前有人说FB要求bug free被吓到了,但是感觉
思路+clean code更重要
4. 在三三面试官面前不要害怕,反正你做的多好他们都可以想办法阴你,还不如放松
心态跟他们好好一战
L(电面跪了)
HR分组的时候有点奇怪,分到了类似Site Reliabil... 阅读全帖
w****a
发帖数: 710
25
是DP求结果的数量么?
如果只是求数量,那就跟unqiue BST那题一样,都是卡塔兰数。
r****7
发帖数: 2282
26
这个根本不用dp,就用greedy就行了

combinations
x*********a
发帖数: 36
27
能贴一下dp的完整代码么?
C********e
发帖数: 492
28
你贴的这个解法不是DP
而且我不认为此题可以用DP做。。。

combinations
r*****3
发帖数: 27
29
可以dp的, 不过LZ代码没给全吧
就是i对括号的可以这样考虑, 最左边的做括号对应的右括号有i种情况, 对于每一种情
况, 这对括号里面的j对括号已经在之前被计算过, 因为j i-j-1对括号也已经在之前被计算过, 因为i-j-1 递推式
buff[i]中的元素 = '(' + buff[j]中的任意一个 + ')' + buff[i-j-1]中的任意一个
, 枚举j就行了, 0 <= j <= i-1
t*****t
发帖数: 86
30
来自主题: JobHunting版 - indeed怎么样?

不难,一个valid parenthese,一个是用车运拷在一起的囚犯的问题,本质是遍历
graph,只不过graph不是联通的罢了。
n******7
发帖数: 99
31
来自主题: JobHunting版 - 发点面经回馈下本版的帮助
Cong!
Return true or false whether a expression has extra parentheses
这题怎么做的?

job
G******d
发帖数: 194
32
****先申明是替朋友发的,我想去G人也不要****
先自我介绍,女生,CS master,纽约附近,今年5月毕业,没有intern经历
备战:
主要刷lc,去年夏天大概刷了四五十道,秋天上课忙又断了。正式开始刷题找工作是去
年12月中旬的寒假。寒假把lc刷完第一遍,今年春季开学开始刷第二遍。刷第二遍时,
为了节约时间,凡是觉得比较有思路的题都只在脑子里过的,每天大概写个两三题让自
己手熟,一题多解的题目都尽量研究了不同的解法。这一遍刷完也快二月底了,感觉略
有小成。之后又分类归纳了lc的题目类型和解法,这一步没花多少时间,但很有意义,
拿到新题目之后开始对题目解法有了比较正确直觉。
我没做过intern是硬伤,所以简历里的course project格外认真准备,确保自己每一个
都能讲清楚。
找工作过程:
从12月寒假开始投简历,以学校joblink,career fair为主,也找人内推了几个和网投
。加起来大概投了150-200个职位,从2月底开始有电面,前后将近20个不同公司,其中
一半要做30分到4小时不等的coding homework,最后onsite拿到6个,只去了4个... 阅读全帖
b**********5
发帖数: 7881
33
来自主题: JobHunting版 - 发一个Startup的面经 - Affirm
我觉得不用对parentheses处理吧, 因为已经prefix了。。。
如果没有let的话, 就是recursive, termination condition就是遇到 number就
return
j********l
发帖数: 325
34
来自主题: JobHunting版 - 报个z******ts的onsite面经
* substring palindrome http://stackoverflow.com/questions/19801081/find-all-substrings-that-are-palindromes
* valid bst by pre order
* fizzbuzz https://www.hackerrank.com/challenges/fizzbuzz
lc implement trie
lc find peak element https://leetcode.com/problems/find-peak-element/
lc excel column number https://leetcode.com/problems/excel-sheet-
column-number/
lc word search
lc generate if-end pair (generate parentheses)
lc construct tree by in an... 阅读全帖
j**********3
发帖数: 3211
35
求代码,求思路,
果然年龄大了,智商捉急啊,还好最近不面
c******n
发帖数: 4965
36
你想想手做怎么弄, 基本上左括号多于右括号就可再加右括号
l******s
发帖数: 3045
37
想象一下用手去挨个提溜中间的操作符,每次提溜出一个二叉树。
p*****2
发帖数: 21240
38

大牛还在刷呀。
j**********3
发帖数: 3211
39
我说的是那个新题,不是generate parenth的,我们说的是一个题吗?
如果是,就太好了。。。
j**********3
发帖数: 3211
40
校长给点思路吧
j**********3
发帖数: 3211
41
大牛,能给段java code吗?
b*****5
发帖数: 238
42
正解
j**********3
发帖数: 3211
43
能给段code么?
s********l
发帖数: 998
j**********3
发帖数: 3211
45
谢谢!
j**********3
发帖数: 3211
46
这个题有点像那个 unique binary search tree, 是不?
k***a
发帖数: 1199
47
加括号相当于进出栈的顺序,和二叉树树木是一样的,叫什么卡特兰数
https://zh.wikipedia.org/wiki/%E5%8D%A1%E5%A1%94%E5%85%B0%E6%95%B0
l*****a
发帖数: 14598
48
再给你几道follow up questions
输入很长时怎么提高性能呢?
如何去重呢?
如何不用递归呢?
p*****2
发帖数: 21240
49

boolean isOp(char c){
return c == '+' || c == '-' || c == '*';
}

int cal(char c, int x, int y){
switch(c) {
case '+':
return x+y;
case '-':
return x-y;
case '*':
return x*y;
default:
return -1;
}
}

List dfs(String input, int s, int e){
List al = new ArrayList<>();
for(int i=s; i char c = input.charAt(i);
... 阅读全帖
l*****a
发帖数: 14598
50
怎么解决输入太长,call stack overflow的问题呢?
请校长指点
首页 上页 1 2 3 4 5 6 7 下页 末页 (共7页)