一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 1065|回复: 14
收起左侧

Bloomberg电面

[复制链接] |试试Instant~ |关注本帖
eliblack 发表于 2016-2-27 16:00:18 | 显示全部楼层 |阅读模式

2016(1-3月) 码农类 硕士 全职@Bloomberg - Other - 技术电面 |Failfresh grad应届毕业生

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

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

x
周一(2.22)的电面,应该是白人小哥,上来就问下简历,问你觉得值得讲的project,我讲了实习,blablabla。。然后问了下java基础,一来就定义memory leak,我说java是memory safe language blablabla,他说通过什么memory safe,我说Garbage Collection,然后问Garbage Collection怎么确定哪些object不要了。。. 1point 3acres 璁哄潧
然后就开始做题,因为我实习是在一家financial的公司,data vendor其中一个就是Bloomberg,然后做的一个tool是用来给management team查看股票状态的,他就给我出了stock market。。。
leetcode 原题,思路理一遍,很快搞定,然后他因为登陆有点问题就跟我一样是在hackrank上是candidate,然后还一个testcase一个testcase对,然后我还要给他讲解我的代码。。。
完了问follow up,如果可以做无限次交易,然后每次交易有一个cost,本来还想来个cost不固定= =,后来说简单点就设成0.01吧. visit 1point3acres.com for more.
[1.2 1.3 1.6 1.1 1.2] 如果这个按照leetcode原题无限次交易的思想,那么是要在1.2买,1.3卖,1.3买,1.6卖这样子做两次(所有的increasing pair),引入cost了以后就是从1.2买,1.6卖了。
我一开始想了下,一下子没想出来,他提示了我说你看看会有什么规律,然后我发现如果是一直递增的话,就没必要卖掉,一直到递减的那刹那。
代码大概是
public double solution(double [] prices)
{
      double min = prices[0];
      double profit = 0;
      double cost = 0.01;
     for(int i=1;i<prices.length;i++)
     {
         if(prices[i]>prices[i-1]). 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
                continue;
         else
             {
                if(prices[i-1]-min>cost)
                  profit = profit + prices[i-1] - min - cost;
                  min = prices[i];
             }
      }
     return profit;
}.鏈枃鍘熷垱鑷1point3acres璁哄潧
他看完了以后,说我这个不应该要keep min variable,我觉得好奇怪,然后说[1.2 1.3 1.1 1.6]就不对了,我说没什么不对啊,就是应该买两次 0.1+0.5-2*0.01的profit啊。然后就有点不知道他在不满意什么了,最后就把我 profit = profit + prices[i-1] - min - cost变成了 - 2*cost,说这样就好。然后我说我以为你的意思是一个整个transaction是一个cost。
然后到这里,就快到45分钟了,然后就问了几个问题就挂掉了,然后第二天就来了拒信。。。果然跟地里面经说的一样,只做了一个题一般就挂掉了。。。

评分

3

查看全部评分

 楼主| eliblack 发表于 2016-2-28 03:13:39 | 显示全部楼层
e6175423 发表于 2016-2-27 22:05.1point3acres缃
楼主,follow up不是leetcode.com/problems/best-time-to-buy-and-sell-stock-ii吗?

同学。。。仔细看帖啊,有cost啊。。“如果这个按照leetcode原题无限次交易的思想,那么是要在1.2买,1.3卖,1.3买,1.6卖这样子做两次(所有的increasing pair),引入cost了以后就是从1.2买,1.6卖了。”
.1point3acres缃
我在帖子里都说的这么清楚了
回复 支持 1 反对 0

使用道具 举报

e6175423 发表于 2016-2-27 22:05:44 | 显示全部楼层
回复 支持 反对

使用道具 举报

jiajunxu20 发表于 2016-2-28 04:09:25 | 显示全部楼层
所以就有点变成找极值的问题,只在极值那点交易,减少交易次数
回复 支持 反对

使用道具 举报

 楼主| eliblack 发表于 2016-2-28 04:13:31 | 显示全部楼层
jiajunxu20 发表于 2016-2-28 04:09
所以就有点变成找极值的问题,只在极值那点交易,减少交易次数

就是如果一直递增就不在中间做交易么。。。
回复 支持 反对

使用道具 举报

searim 发表于 2016-2-28 06:26:51 | 显示全部楼层
一亩三分地严打"顶""好贴""收藏了"之类的垃圾回复帖!被警告三次,系统会自动封杀ID!

想支持楼主,请点击帖子下方的"好苗""分享""收藏"键,酌情给楼主加大米(系统不扣你自己的分)。
积分不够看不了帖子,请参考论坛导航里的"帮助","新手提纲"里有攒积分指南
回复 支持 反对

使用道具 举报

searim 发表于 2016-2-28 06:47:47 | 显示全部楼层
[1.2 1.3 1.1 1.6]这个test case过不了是因为遍历到 i=3时候因为还是升序被continue没有计算最后一次交易的利润
回复 支持 反对

使用道具 举报

 楼主| eliblack 发表于 2016-2-28 06:56:08 | 显示全部楼层
searim 发表于 2016-2-28 06:47.鏈枃鍘熷垱鑷1point3acres璁哄潧
[1.2 1.3 1.1 1.6]这个test case过不了是因为遍历到 i=3时候因为还是升序被continue没有计算最后一次交易的 ...

恩恩,我这个代码是没有考虑到这个情况,我不大记得我当时有没有考虑这个情况,有点久远了,但是当时他给的是[1.2 1.3 1.1 1.6 1.3 1.1]这种好像,然后我们争论点就很奇怪,他说我不需要用min,最后看了看又觉得只需要把cost改成两倍就好。。然后就稀里糊涂的结束了
回复 支持 反对

使用道具 举报

e6175423 发表于 2016-2-28 11:41:56 | 显示全部楼层
eliblack 发表于 2016-2-28 03:13
同学。。。仔细看帖啊,有cost啊。。“如果这个按照leetcode原题无限次交易的思想,那么是要在1.2买,1.3 ...

谢谢楼主!!不过我觉得您的答案不对哈。考虑case [1, 1.11, 1.1, 1.5],cost = 0.01,这个时候按照您的答案需要交易两次:profit=0.11+0.4-0.2*2=0.11,但正确答案应该是只交易一次:profit = 0.5-0.2*1 = 0.3,  所以面官的提示是有道理的~
回复 支持 反对

使用道具 举报

 楼主| eliblack 发表于 2016-2-28 16:03:57 | 显示全部楼层
e6175423 发表于 2016-2-28 11:41
谢谢楼主!!不过我觉得您的答案不对哈。考虑case [1, 1.11, 1.1, 1.5],cost = 0.01,这个时候按照您的答 ...

我代码确实不够完全。。只是个粗略的版本,但是你这个计算有点问题啊。。cost是0.01,你为什么是0.2*2了?cost不同。要不要买入确实是有影响的。。按我的应该是0.11+0.4 - 2*0.01 = 0.49
回复 支持 反对

使用道具 举报

e6175423 发表于 2016-2-28 16:25:22 | 显示全部楼层
恩恩,对~我太粗心啦。但是按照面试官的意思一次交易是2*cost,所以你的是0.47,另一种是0.48。所以答案不对~
回复 支持 反对

使用道具 举报

 楼主| eliblack 发表于 2016-2-28 16:31:33 | 显示全部楼层
e6175423 发表于 2016-2-28 16:25
恩恩,对~我太粗心啦。但是按照面试官的意思一次交易是2*cost,所以你的是0.47,另一种是0.48。所以答案不 ...
. more info on 1point3acres.com
所以cost不同,结果不一样么。。你有什么好的想法能bug free么?
回复 支持 反对

使用道具 举报

e6175423 发表于 2016-2-28 22:32:27 | 显示全部楼层
下面是我根据自己的理解写的代码,测了一些case没问题。欢迎指点~~. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  1. template <typename T>
  2. T solution(vector<T>& prices, const T& cost)
  3. {-google 1point3acres
  4.   T tmin = prices[0];
  5.   T profit = 0;
  6.   size_t n = prices.size();. 1point3acres.com/bbs
  7.   for(int i = 1;i <= n; ++i).1point3acres缃
  8.   {.鏈枃鍘熷垱鑷1point3acres璁哄潧
  9.     if(i < n && prices[i] > prices[i-1])
  10.       profit+=(prices[i] - prices[i-1]);
  11.     else
  12.     {
  13.       if (i == n) {
  14.         profit -= min(prices[i-1] - tmin, 2*cost);
  15.       } else{
  16.         if (prices[i-1] - prices[i]> 2*cost)
  17.           tmin = prices[i];
  18.         profit -= min(prices[i-1] - prices[i], 2*cost);. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  19.       }
  20.     }. From 1point 3acres bbs
  21.   }
  22.   return profit;. Waral 鍗氬鏈夋洿澶氭枃绔,
  23. }
复制代码
  1. int main() {
  2. // vector<double> prices({1.2, 1.3, 1.6, 1.1, 1.2});
  3. // vector<double> prices({1.0, 1.11, 1.0, 1.2, 1.5});
  4.   vector<double> prices({1.0, 1.11, 1.3, 1.2, 1.5});
    . From 1point 3acres bbs
  5.   cout<<solution(prices, 0.01)<<endl;
  6.   return 0;
  7. }
复制代码

回复 支持 反对

使用道具 举报

table 发表于 2016-3-2 05:46:29 | 显示全部楼层
e6175423 发表于 2016-2-28 22:32
下面是我根据自己的理解写的代码,测了一些case没问题。欢迎指点~~
. From 1point 3acres bbs
同学,你的这个还是有问题的,如果test case是vector<double> prices({1.2, 1.3, 1.6, 1.5, 1.2}); 你的输出是0.36,实际应该是0.38
代码其实稍微修改下楼主的就好了,像这样:
double stock_cost(vector<double>& prices, const double& cost) {
        double min = prices[0];
        double profit = 0;
        for(int i=1;i<=prices.size();++i)
        {
            if(i<prices.size()&&prices>prices[i-1])
                continue;
            else
            {
                if(prices[i-1]-min>2*cost)
                    profit += prices[i-1]-min-2*cost;
                min = prices;
            }
        }
    return profit;

    }

回复 支持 反对

使用道具 举报

totolin 发表于 2016-3-27 23:53:54 | 显示全部楼层
楼主这题有点类似Best Time to Buy and Sell Stock IV的简单版, 附上我的python 答案:

  1. def maxprofit(prices, cost):
  2.     profit = 0
  3.     maxtmp = profit - prices[0]
  4.     for i in range(1, len(prices)):
  5.         profit = max(profit, prices[i] - 2*cost + maxtmp)
  6.         maxtmp = max(maxtmp, profit - prices[i])
  7.     return profit
复制代码
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

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

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-11 06:51

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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