12
返回列表 发新帖
楼主: 喜刷刷_Go
跳转到指定楼层
上一主题 下一主题
收起左侧

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

🔗
wisdompeak2 2021-3-17 10:56:55 | 只看该作者
全局:
14417335 发表于 2021-3-16 02:36
871

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

“拥有多少股”要计算到n/2,时间复杂度是o(N^2),感觉复杂度太大了。不如前面的贪心法好。
回复

使用道具 举报

🔗
14417335 2021-3-18 00:28:05 | 只看该作者
全局:
wisdompeak2 发表于 2021-3-16 21:56
“拥有多少股”要计算到n/2,时间复杂度是o(N^2),感觉复杂度太大了。不如前面的贪心法好。

没错O (N^2 / 2)。但我还没完全接受那个贪心的思路的正确性。先后顺序还比较重要。这题目应该还和以前的系列一样要求先买再卖。
回复

使用道具 举报

🔗
ts01543181 2021-3-19 01:02:34 | 只看该作者
全局:
這題是不是可以用merge sort的方法解?因為只需要知道哪些element在左(能買) 哪些在右(能賣)而subarray裡面的順序是可以被排序的
做merge sort的同時用雙指針右邊subarray最大的減去左邊subarray最小的就可以得到當前左右sub array最大的總差價
回复

使用道具 举报

🔗
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 赞一个

查看全部评分

回复

使用道具 举报

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

本版积分规则

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