由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - T面经一题
相关主题
facebook电话二面题目reverse an array
求问一题,如何计算String 算式结果?问个题1:implement + - * / without arithmetic operation
g家onsite一题求解请教问题 三个整数之和为零的题目
麻烦大家帮忙看一下求质数这段代码,求拍砖~请教这道题有没有比较efficient的方法
Internship interview (Medical Imaging)看到一个题目
我发现我竟然学会了12种tree traversal的办法问个stl的iterator问题
请问怎样写没有parent pointer的BST iterator?Bloomberg 电面
L家的高频题merge k sorted arrays giving iterators求讨论!hash_map 的遍历问题
相关话题的讨论汇总
话题: num话题: int话题: return话题: inleft
进入JobHunting版参与讨论
1 (共1页)
m**********w
发帖数: 60
1
电面:
解一个简单的一元一次方程,
比如: 5 + x - 1 = x - 1 + x, 输出 x=5.
开始只考虑 +, - 的情况,
然后问如果有x,/ 和括号 怎么做。
h*******e
发帖数: 1377
2
感觉把 x 和 5 1 变成 size 为2的 vector 表示 ax + b vec[0] = a vec[1] = b,
然后算作左边得到一个最简的 size为2的vector,再算右边, 然后最后 结果是 1位
相减 / 0位相减 的相反数。
c*******y
发帖数: 98
3
+ - 扩展成 + - * /, 再扩展成 带()的,我觉得直到+ - * /好像还好对付一点,
maintain一个系数list,然后iterative的弄掉符号
1 - 4行先做* / 再做 + -
2*x/3*5+x*3/5+4 = 2+x*3+0 [0][0] [0][0]
2x/3*5+3x/5+4 = 2+3x+0 [0][0] [0][0]
1.5x+0.6x+4 = 2+3x+0 [0][0] [0][0]
2.1x+4 = 2+3x+0 [2.1][4] [0][0] 直到某边只有x项和常数项,加入
list
这一步整理x到前边,常数到后边
2.1x+4 = 3x+2+0 [2.1][4] [0][0]
重复1 - 4的步骤(函数)
2.1x+4 = 3x+2 [2.1][4] [3][2] 直到某边只有x项和常数项,加入
list
最后算x,如果输入合理,应该能算出来。当然最好验证一下/0之类的case。
x = (v2[1]-v1[1])/(v1[0]-v2[0]);
带括号的,我觉得以上边步骤为子函数,对最里面的括号内的东西先做,变成ax+b,然
后去掉括号,反复重复这个步骤,应该会得到最终的ax+b = cx+d的形式。不过我只会
iterative,每次都重新process新的equation,应该有大神可以用recursive直接十几
行代码就搞定的。。
l*********u
发帖数: 19053
4
先搞成ax+b=cx+d,再扫一遍,算a,b,c,d。先括号,再*/,再+-

【在 m**********w 的大作中提到】
: 电面:
: 解一个简单的一元一次方程,
: 比如: 5 + x - 1 = x - 1 + x, 输出 x=5.
: 开始只考虑 +, - 的情况,
: 然后问如果有x,/ 和括号 怎么做。

o*****o
发帖数: 10
5
假设你有一个多项式对象,包装了多项式的加减乘除,那么用这个多项式对象代替int
,就可以像做“实现一个计算器”这种题目一样处理等式左右两边的式子。这样应该能
够处理相当复杂的情况(比如有高次项但最后被抵消x*x*x+x+1-x*x*x=0)。
需要额外实现的就是这个多项式对象,以及多项式的加减乘除。多项式除比较难做,可
以保留分子分母,最后一步左右互乘对面的分母简化掉。
不知道是不是有点overkill了。

【在 m**********w 的大作中提到】
: 电面:
: 解一个简单的一元一次方程,
: 比如: 5 + x - 1 = x - 1 + x, 输出 x=5.
: 开始只考虑 +, - 的情况,
: 然后问如果有x,/ 和括号 怎么做。

m**********w
发帖数: 60
6
电面:
解一个简单的一元一次方程,
比如: 5 + x - 1 = x - 1 + x, 输出 x=5.
开始只考虑 +, - 的情况,
然后问如果有x,/ 和括号 怎么做。
h*******e
发帖数: 1377
7
感觉把 x 和 5 1 变成 size 为2的 vector 表示 ax + b vec[0] = a vec[1] = b,
然后算作左边得到一个最简的 size为2的vector,再算右边, 然后最后 结果是 1位
相减 / 0位相减 的相反数。
c*******y
发帖数: 98
8
+ - 扩展成 + - * /, 再扩展成 带()的,我觉得直到+ - * /好像还好对付一点,
maintain一个系数list,然后iterative的弄掉符号
1 - 4行先做* / 再做 + -
2*x/3*5+x*3/5+4 = 2+x*3+0 [0][0] [0][0]
2x/3*5+3x/5+4 = 2+3x+0 [0][0] [0][0]
1.5x+0.6x+4 = 2+3x+0 [0][0] [0][0]
2.1x+4 = 2+3x+0 [2.1][4] [0][0] 直到某边只有x项和常数项,加入
list
这一步整理x到前边,常数到后边
2.1x+4 = 3x+2+0 [2.1][4] [0][0]
重复1 - 4的步骤(函数)
2.1x+4 = 3x+2 [2.1][4] [3][2] 直到某边只有x项和常数项,加入
list
最后算x,如果输入合理,应该能算出来。当然最好验证一下/0之类的case。
x = (v2[1]-v1[1])/(v1[0]-v2[0]);
带括号的,我觉得以上边步骤为子函数,对最里面的括号内的东西先做,变成ax+b,然
后去掉括号,反复重复这个步骤,应该会得到最终的ax+b = cx+d的形式。不过我只会
iterative,每次都重新process新的equation,应该有大神可以用recursive直接十几
行代码就搞定的。。
l*********u
发帖数: 19053
9
先搞成ax+b=cx+d,再扫一遍,算a,b,c,d。先括号,再*/,再+-

【在 m**********w 的大作中提到】
: 电面:
: 解一个简单的一元一次方程,
: 比如: 5 + x - 1 = x - 1 + x, 输出 x=5.
: 开始只考虑 +, - 的情况,
: 然后问如果有x,/ 和括号 怎么做。

o*****o
发帖数: 10
10
假设你有一个多项式对象,包装了多项式的加减乘除,那么用这个多项式对象代替int
,就可以像做“实现一个计算器”这种题目一样处理等式左右两边的式子。这样应该能
够处理相当复杂的情况(比如有高次项但最后被抵消x*x*x+x+1-x*x*x=0)。
需要额外实现的就是这个多项式对象,以及多项式的加减乘除。多项式除比较难做,可
以保留分子分母,最后一步左右互乘对面的分母简化掉。
不知道是不是有点overkill了。

【在 m**********w 的大作中提到】
: 电面:
: 解一个简单的一元一次方程,
: 比如: 5 + x - 1 = x - 1 + x, 输出 x=5.
: 开始只考虑 +, - 的情况,
: 然后问如果有x,/ 和括号 怎么做。

f**********t
发帖数: 1001
11
int opNum(int x, int y, char op) {
switch (op) {
case '+':
return x + y;
case '_':
return x - y;
case '*':
return x * y;
case '/':
if (y == 0) {
return 0;
}
return x / y;
}
return 0;
}
int calc(stack &ops, stack &nums) {
int x = nums.top();
nums.pop();
int y = nums.top();
nums.pop();
int res = opNum(x, y, ops.top());
ops.pop();
nums.push(res);
return res;
}
string simplify(string s) {
auto it = s.begin();
stack ops;
stack nums;
int coefficient = 0;
bool inLeft = true;
while (1) {
while (it != s.end() && isspace(*it)) {
++it;
}
if (it == s.end()) {
break;
}
if (*it == '+' || *it == '-') {
ops.push(*it);
++it;
} else if (*it == '=') {
while (!ops.empty()) {
calc(ops, nums);
}
inLeft = false;
ops.push('+');
++it;
} else {
int num = 0;
while (it != s.end() && isdigit(*it)) {
num = num * 10 + (*it - '0');
++it;
}
if (ops.size() == 1 && nums.empty() &&
(it == s.end() || *it != 'x')) {
if (ops.top() == '-') {
num = -num;
}
ops.pop();
}
if (!inLeft) {
num = -num;
}
if (it == s.end()) {
nums.push(num);
break;
}
if (*it == 'x') {
num = num == 0 ? (inLeft ? 1 : -1) : num;
if (ops.empty()) {
coefficient += num;
} else {
if (ops.top() == '+') {
coefficient += num;
} else if (ops.top() == '-') {
coefficient -= num;
}
ops.pop();
}
++it;
} else {
nums.push(num);
}
}
}
while (!ops.empty()) {
calc(ops, nums);
}
return to_string(coefficient) + "x" + " = " + to_string(-nums.top());
}
w****k
发帖数: 755
12
其实按符号截断后hash就行了,你知道多少个x,多少个5,等等。
1 (共1页)
进入JobHunting版参与讨论
相关主题
hash_map 的遍历问题Internship interview (Medical Imaging)
how to query in the universal hash table?我发现我竟然学会了12种tree traversal的办法
iterative string permutation请问怎样写没有parent pointer的BST iterator?
what is the internal implementation of DequeL家的高频题merge k sorted arrays giving iterators求讨论!
facebook电话二面题目reverse an array
求问一题,如何计算String 算式结果?问个题1:implement + - * / without arithmetic operation
g家onsite一题求解请教问题 三个整数之和为零的题目
麻烦大家帮忙看一下求质数这段代码,求拍砖~请教这道题有没有比较efficient的方法
相关话题的讨论汇总
话题: num话题: int话题: return话题: inleft