10月28,K神开讲数据科学:AB Test/实验设计


一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
天天打游戏、照样领工资、还办H1B
这份工作你要不要?
把贵司招聘信息放这里
查看: 4163|回复: 16
收起左侧

Zenefits 电面

[复制链接] |试试Instant~ |关注本帖
ManitobaFarmer 发表于 2015-5-1 01:43:29 | 显示全部楼层 |阅读模式

2015(4-6月) 码农类 硕士 全职@Zenefits - 内推 - 技术电面 |Otherfresh grad应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
印度人

有点像 reverse polish notation 的变种,计算一个表达式的值的。要求自行设计表达式的数据结构并计算表达式的值。

有几种特殊情况
1. 单输入一个数,比如 [0],是合法,结果为0;
2. 单输入一个运算符也是合法的。 无数字运算的 '+', '-', '/' 结果为 0, 单个 '*' 的结果为 1.
3. 一个运算符可以有好几个计算数字。 比如输入为 ['+', 1, 2, 3],结果为1 + 2 + 3 = 6.
4. 表达式可嵌套,['+', 1, 2, ['*', 1, 3]],这样结果为 1 + 2 + 1 * 2 = 5.

输入一定合法,不用考虑给了两个连续数字却没有运算符的情况,也不用考虑除数为0的情况。

我的做法为新建一个 Expression 类,用于解决输入包含运算符,数字,或者expression三种情况,这样输入就可以为一个Expresssion 的List,再用一个Queue来决定问题。不知道有没有大神有更好的做法。



面完收到要求第二轮电面的邮件,有没有大神知道这是什么意思?是面得不太好吗?

评分

3

查看全部评分

GatherNone 发表于 2015-5-1 07:59:55 | 显示全部楼层
第四种情况应该是1 + 2 + 1 * 3 = 6 吧
回复 支持 反对

使用道具 举报

 楼主| ManitobaFarmer 发表于 2015-5-1 10:59:45 | 显示全部楼层
GatherNone 发表于 2015-5-1 07:59
第四种情况应该是1 + 2 + 1 * 3 = 6 吧

恩,打错了,不好意思。
回复 支持 反对

使用道具 举报

xieqilu1989 发表于 2015-5-1 11:04:10 | 显示全部楼层
楼主,这个原始的输入带那个中括号吗?
回复 支持 反对

使用道具 举报

 楼主| ManitobaFarmer 发表于 2015-5-1 11:10:36 | 显示全部楼层
xieqilu1989 发表于 2015-5-1 11:04
楼主,这个原始的输入带那个中括号吗?
. Waral 鍗氬鏈夋洿澶氭枃绔,
你愿意写成 String[] 的形式也可以,数据结构随便设计,能计算这么个 expression 的值就行。
回复 支持 反对

使用道具 举报

xieqilu1989 发表于 2015-5-1 11:23:42 | 显示全部楼层
ManitobaFarmer 发表于 2015-5-1 11:10
你愿意写成 String[] 的形式也可以,数据结构随便设计,能计算这么个 expression 的值就行。
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
我知道,我的意思是这个expression里面是否用中括号区分了不同的嵌套部分,还是没有中括号只靠字符去区分?
回复 支持 反对

使用道具 举报

 楼主| ManitobaFarmer 发表于 2015-5-1 11:27:17 | 显示全部楼层
xieqilu1989 发表于 2015-5-1 11:23. From 1point 3acres bbs
我知道,我的意思是这个expression里面是否用中括号区分了不同的嵌套部分,还是没有中括号只靠字符去区分 ...

自己想办法解决。逻辑上是有个中括号区分的,怎么实现就是面试者要处理的问题。
回复 支持 反对

使用道具 举报

xieqilu1989 发表于 2015-5-1 12:05:10 | 显示全部楼层
ManitobaFarmer 发表于 2015-5-1 11:27
自己想办法解决。逻辑上是有个中括号区分的,怎么实现就是面试者要处理的问题。

明白了!多谢啦!
回复 支持 反对

使用道具 举报

ShadowChaser 发表于 2015-5-1 12:28:58 | 显示全部楼层
那么,类似于[+, 1, 2, 3, [*, 2, 3], 6] 这种算合法输入么?
如果不算的话,我觉得逆序处理list比较简单吧
[+, 1, 2, 3, *, 2, 3, 6]  => [+, 1, 2, 3, 36] => 42
回复 支持 反对

使用道具 举报

 楼主| ManitobaFarmer 发表于 2015-5-1 23:18:01 | 显示全部楼层
ShadowChaser 发表于 2015-5-1 12:28
那么,类似于[+, 1, 2, 3, [*, 2, 3], 6] 这种算合法输入么?
如果不算的话,我觉得逆序处理list比较简单 ...

算,结果是 1 + 2 + 3 + (2 * 3) + 6 = 18
回复 支持 反对

使用道具 举报

Xin_walker 发表于 2015-5-2 01:30:06 | 显示全部楼层
ManitobaFarmer 发表于 2015-5-1 23:18
算,结果是 1 + 2 + 3 + (2 * 3) + 6 = 18

所以输入序列本身是有[]的吗?不然输入+, 1, 2, 3, *, 2, 3, 6, 就有[+, 1, 2, 3, [*, 2, 3], 6] 和[+, 1, 2, 3, [*, 2, 3], 6] 两种解释嘞?
回复 支持 反对

使用道具 举报

 楼主| ManitobaFarmer 发表于 2015-5-2 02:01:54 | 显示全部楼层
Xin_walker 发表于 2015-5-2 01:30
所以输入序列本身是有[]的吗?不然输入+, 1, 2, 3, *, 2, 3, 6, 就有[+, 1, 2, 3, [*, 2, 3], 6] 和[+, 1 ...

所以你需要自己解决这个问题。
回复 支持 反对

使用道具 举报

summerjx 发表于 2015-5-2 13:14:10 | 显示全部楼层
请问一下用queue怎么做呢
回复 支持 反对

使用道具 举报

hami33 发表于 2015-5-7 15:34:01 | 显示全部楼层
有人能分享一个code怎么写吗?
回复 支持 反对

使用道具 举报

johnnywsd 发表于 2015-5-12 12:14:20 | 显示全部楼层
  1. class Solution:
  2. . 鍥磋鎴戜滑@1point 3 acres
  3.     def eval(self, expr):
  4.         operator = expr[0]
  5.         expr = expr[1:]
  6.         evaled_expr = []
  7.         for it in expr:
  8.             if isinstance(it, list):
  9.                 evaled = self.eval(it)
  10.                 evaled_expr.append(evaled)
  11.             else:
  12.                 evaled_expr.append(it)
  13.         res = 0
  14.         if operator == '+':. From 1point 3acres bbs
  15.             res = sum(evaled_expr)
  16.         elif operator == '*':
  17.             res = 1
  18.             for it in evaled_expr:.1point3acres缃
  19.                 res *= it
  20.         elif operator == '-':. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  21.             res = evaled_expr[0] if len(evaled_expr) > 0 else 0.鏈枃鍘熷垱鑷1point3acres璁哄潧
  22.             for it in evaled_expr[1:]:. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  23.                 res -= it
  24.         elif operator == '/':
  25.             res = evaled_expr[0] if len(evaled_expr) > 0 else 0
  26.             for it in evaled_expr[1:]:
  27.                 res /= it
  28.         return res
复制代码
Test Cases:
  1. import unittest. 1point 3acres 璁哄潧
  2. from solution import Solution
  3. . more info on 1point3acres.com
  4. . From 1point 3acres bbs
  5. class Test(unittest.TestCase):. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  6. . from: 1point3acres.com/bbs
  7.     def test1(self):
  8.         s = Solution()
    .1point3acres缃
  9.         expr = ['+', 1, 2, ['*', 1, 3]]
  10.         res = s.eval(expr). Waral 鍗氬鏈夋洿澶氭枃绔,
  11.         self.assertEqual(res, 6)

  12.     def test2(self):.1point3acres缃
  13.         s = Solution()
  14.         expr = ['+', 1, 2, ['*', 2, 3]]
  15.         res = s.eval(expr)
  16.         self.assertEqual(res, 9)

  17.     def test3(self):
  18.         s = Solution()
  19.         expr = ['+', ['*'], ['-'], ['/']]
  20.         res = s.eval(expr). From 1point 3acres bbs
  21.         self.assertEqual(res, 1)
    . 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷

  22.     def test4(self):
  23.         s = Solution()
  24.         expr = ['+', 1, 2, ['*', 2, 3], ['-', 4, 5], ['/', 8, 2]]
  25.         res = s.eval(expr). 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  26.         self.assertEqual(res, 12)

  27. if __name__ == '__main__':. 鍥磋鎴戜滑@1point 3 acres
  28.     unittest.main(verbosity=2)
复制代码
回复 支持 反对

使用道具 举报

huahuazhu 发表于 2015-5-17 07:21:24 | 显示全部楼层
没太想明白楼主的做法,我的想法跟johnnywsd 的类似,不过python我不熟,我用java的话就是这样一个class
class Expression{. more info on 1point3acres.com
char operator;
list<double> numbers;
list<Expression> innerExpression;
...
} 鏉ユ簮涓浜.涓夊垎鍦拌鍧.

但是这样比较麻烦的是需要有一个parser 把类似 [+, 1, 2, 3, [*, 2, 3], 6]  的输入变成一个object. 鍥磋鎴戜滑@1point 3 acres

我没想明白怎么用“Expresssion 的List,再用一个Queue来决定问题”,我这种定义class的方法,貌似一个object就足够了
回复 支持 反对

使用道具 举报

sunnycat 发表于 2015-5-23 12:00:15 | 显示全部楼层
谢谢楼主,解法很clean
回复 支持 反对

使用道具 举报

本版积分规则

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2017-10-20 20:38

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表