专栏名称: 九章算法
专业的北美IT求职经验分享、技术交流社区,帮助你找到好的IT工作。由硅谷顶尖IT企业工程师维护。提供专业的算法培训/面试咨询,官网 www.jiuzhang.com
目录
相关文章推荐
九章算法  ·  最后一天!九章消费券免费抢! ·  3 天前  
九章算法  ·  谷歌/亚麻的BQ题库,附上标准答案! ·  昨天  
算法爱好者  ·  o3-mini 碾压 DeepSeek ... ·  4 天前  
51好读  ›  专栏  ›  九章算法

Facebook 面试题 | 有手续费的买卖股票问题

九章算法  · 公众号  · 算法  · 2018-02-06 08:00

正文


作者 | 戴助教+本助教

编辑 | Cecily

专栏 | 九章算法


题目描述


1. 给定一支股票每天的价格以及进行一次卖出所需要的交易费,每次最多只能拥有 一支股票,问能获得的最大利润是多少。

2. 输入输出

ⅰ. Input: prices = [1, 3, 2, 8, 4, 9], fee = 2

ⅱ. Output: 8.


解题思路分析


1. 我们考虑最朴素的方法,对于每一天,如果当前有股票,考虑出售或者保留,如果没股票,考虑购买或者跳过,进行dfs搜索。每天都有两种操作,时间复杂度为O(2^n)


2. 如何优化呢?我们用动态规划的思想来解决这个问题,考虑每一天同时维护两种状态:拥有股票(own)状态和已经售出股票(sell)状态。用own和sell分别保留这两种状态到目前为止所拥有的最大利润。 对于sell,用前一天own状态转移,比较卖出持有股是否能得到更多的利润,即sell = max(sell , own + price - fee), 而对于own , 我们考虑是否买新的股票更能赚钱(换言之,更优惠),own=max( own, sell-price)


3. 初始化我们要把sell设为0表示最初是sell状态且没有profit,把own设为负无穷因为最初不存在该状态,我们不希望从这个状态进行转移


4. 因为我们保存的都是最优状态,所以在买卖股票时候取max能保证最优性不变


5. 最后直接返回sell即可


参考程序


http://www.jiuzhang.com/solution/best-time-to-buy-and-sell-stock-with-transaction-fee/


面试官角度分析


本题是一道中等偏简单难度的题目,需要用到动态规划的思想,利用以前的状态去更新当前状态,给出正确的O(n)解法可以达到hire要求


lintcode相关问题


http://lintcode.com/en/problem/best-time-to-buy-and-sell-stock/



更多精彩内容
  • 回复“简历”,查看简历撰写指南,获取“简历模板”

  • 回复“冷冻期”,查看北美各大IT企业冷冻期信息和注意事项

  • 回复“Career”, 查看Caireer Fair 攻略 check list

  • 回复“薪资”,查看北美各大IT企业New Grades Engineer 薪资水平;

  • 回复“项目”,查看7-14天可以搞定的小项目推荐

  • 回复“评分”,查看系统设计评分指南

  • 回复“behavior”,查看behavior interview指南

  • 回复“晋升”,查看Engineer晋升机制


九章算法 | 帮助更多中国人找到好工作

春季课程免费试听







请到「今天看啥」查看全文