查看: 1974| 回复: 12
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 一道关于股票的算法题,和121 & 123 类似

全局:

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
楼主近期面试了 一家公司, 面试题是这样的: 每天最多买一次,每天也最多卖一次,买一次或者卖一次只能买一股或者卖一股,求最大利润。
这道题和LC 121 和 123 很像,但是可以同时持有多股。注意的是,给出的array 代表的是一只股票不同天的价格。比如[1,2,3,4]。
有会的同学能分享下思路吗? 谢谢~~~

评分

参与人数 2大米 +6 收起 理由
不知道小帅 + 1 赞一个
14417335 + 5

查看全部评分


上一篇:F现在OA都是4道题目了吗
下一篇:关于lc 312中的Heuristic
推荐
oauth 2021-3-15 12:15:44 | 只看该作者
全局:
  1. int maximumProfit(vector<int>& prices) {
  2.     priority_queue<pair<int, int>> Q;
  3.    
  4.     int profit = 0, n = prices.size();
  5.    
  6.     unordered_set<int> visited;
  7.    
  8.     for (int i = 0; i < n; i++) {
  9.         Q.push(make_pair(-prices[i], i));
  10.     }
  11.    
  12.     for (int i = n - 1; i >= 0; i--) {
  13.         auto [price, index] = Q.top();
  14.         
  15.         if (index < i && -price < prices[i] && visited.count(index) == 0) {
  16.             profit += prices[i] + price; Q.pop();
  17.             visited.insert(index);
  18.         }
  19.     }
  20.    
  21.     return profit;
  22. }
复制代码


楼主试试看看对不对?

补充内容 (2021-3-16 00:31):
这个写的不太对。大家别参考了。
回复

使用道具 举报

推荐
twtypsj 2021-3-19 01:40:26 | 只看该作者
全局:
本帖最后由 twtypsj 于 2021-3-19 01:42 编辑

我不太确定完全理解了题目的意思,我理解的意思大概是每天都可以买或者卖,可以买很多次但是只卖一次。这样理解对吗?
比如说
{1, 2, 3, 4, 1, 5, 4}
买 买 买 买 买 卖 买

这样的最终受益是 4+3+2+1+4 = 14


  1. [i]#include <iostream>
  2. #include <vector>
  3. using namespace std;

  4. int maxProfit(vector<int> input)
  5. {
  6.     int res = 0;
  7.     for(int i=input.size()-1, mx=input.back(); i>=0; --i)
  8.     {
  9.         mx = max(mx, input[i]);
  10.         res += mx-input[i];
  11.     }
  12.     return res;
  13. }
  14. int main()
  15. {
  16.     cout << maxProfit({1,2,3,4,1,5,4}) << endl;

  17.     return 0;
  18. }[i][i]
复制代码


从后往前找最大值,用当前值和最大值的差值作为收益,直到所有的值都访问一次。
这样理解不知道对不对。[/i][/i][/i]

评分

参与人数 1大米 +1 收起 理由
blackrose + 1 赞一个

查看全部评分

回复

使用道具 举报

无效楼层,该帖已经被删除
🔗
oauth 2021-3-15 12:33:25 | 只看该作者
全局:
感觉是不是贪心算法。按price的大小把index存到最大堆,然后从大到小开始遍历,然后找到坐标在Q.top()左边的最小的price,然后计算profit。

比如说 prices 是 [4, 2, 7, 100, 3], 那么heap里存的就是 [3, 2, 0, 4, 1]。

i = 3, prices[3] = 100, 左边比它小的最小的price是2, 所以 profit = 100 - 2。然后记录一下 2 已经被用过了。然后Q.pop(),处理下一个。
i = 2, prices[2] = 7, 左边比它小的最小的还没用过的price是4, 所以 profit += 7 - 4。

回复

使用道具 举报

🔗
wisdompeak2 2021-3-15 14:44:17 | 只看该作者
全局:
本帖最后由 wisdompeak2 于 2021-3-15 15:19 编辑

乍看以为是122,仔细一想还不一样。感觉贪心可解。看来股票题的变种很多呀。

评分

参与人数 1大米 +2 收起 理由
oauth + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
14417335 2021-3-16 00:22:08 | 只看该作者
全局:
这是不是加油站的变种题呢?
回复

使用道具 举报

🔗
 楼主| 喜刷刷_Go 2021-3-16 01:33:30 | 只看该作者
全局:
14417335 发表于 2021-3-16 00:22
这是不是加油站的变种题呢?

加油站 是哪道题
回复

使用道具 举报

🔗
 楼主| 喜刷刷_Go 2021-3-16 01:34:19 | 只看该作者
全局:
wisdompeak2 发表于 2021-3-15 14:44
乍看以为是122,仔细一想还不一样。感觉贪心可解。看来股票题的变种很多呀。

贪心算法,能不能大概分享下思路,谢谢~~
回复

使用道具 举报

🔗
14417335 2021-3-16 02:36:10 | 只看该作者
全局:

871

那么DP【第几天】【拥有多少股】= 最多的价值
回复

使用道具 举报

🔗
 楼主| 喜刷刷_Go 2021-3-16 10:49:26 | 只看该作者
全局:
14417335 发表于 2021-3-16 02:36
871

那么DP【第几天】【拥有多少股】= 最多的价值

谢谢,我看看~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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