楼主: 匿名
跳转到指定楼层
上一主题 下一主题
收起左侧

求教amazon oa max Stock price的思路

🔗
wanlu2012 2022-7-26 03:25:12 | 只看该作者
全局:
PipEvangelist 发表于 2022-7-25 12:09
Right. Otherwise, you'd get TLE.

Thanks! Appreciate your help~
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-QU9QM  2022-7-26 09:26:54
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
南宫狗剩 2022-7-26 10:54:20 | 只看该作者
全局:
Hhhlium 发表于 2022-7-25 21:15
这里直接初始把ans 设为 -1 是不是就可以不用在return的时候判断了

这个地方应该是没问题的,因为说了是stock market所以不应该出现负数。
但是把题目换一下或者强行解释可以出现负数的话,用负无穷最安全。
回复

使用道具 举报

🔗
wanlu2012 2022-7-26 15:47:14 | 只看该作者
全局:
PipEvangelist 发表于 2022-7-25 12:09
Right. Otherwise, you'd get TLE.

Can you share the code? I would like to check whether my solution is correct. Thx~
回复

使用道具 举报

🔗
wanlu2012 2022-7-26 15:51:59 | 只看该作者
全局:
这是我的解法,不知道能不能过所有的 test care,欢迎大家指正错误~
  1. public int maxPrice(int[] prices, int k) {
  2.             if (prices == null || prices.length == 0) {
  3.                 return 0;
  4.             }

  5.             Set<Integer> window = new HashSet<>();
  6.             Map<Integer, Integer> numToIdx = new HashMap<>();
  7.             int maxPrice = 0;
  8.             int left = 0, right = 0;
  9.             int currSum = 0;

  10.             while (right < prices.length) {
  11.                 while (right < prices.length && window.size() < k) {
  12.                     if (window.contains(prices[right])) {
  13.                         // move to next non-duplicate position
  14.                         int nextLeft = numToIdx.get(prices[right]) + 1;

  15.                         while (left < nextLeft) {
  16.                             window.remove(prices[left]);
  17.                             numToIdx.remove(prices[left]);
  18.                             currSum -= prices[left];
  19.                             left++;
  20.                         }

  21.                     } else {
  22.                         window.add(prices[right]);
  23.                         currSum += prices[right];
  24.                         numToIdx.put(prices[right], right);
  25.                         right++;
  26.                     }
  27.                 }

  28.                 maxPrice = Math.max(maxPrice, currSum);

  29.                 window.remove(prices[left]);
  30.                 currSum -= prices[left];
  31.                 left++;
  32.             }

  33.             return maxPrice;

  34.         }
复制代码

补充内容 (2022-07-26 15:54 +8:00):
不知道为啥缩进变得这么多,格式有点乱 QAQ
回复

使用道具 举报

🔗
桃蹊 2022-7-29 06:56:12 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
wanlu2012 2022-7-29 14:27:52 | 只看该作者
全局:
桃蹊 发表于 2022-7-28 15:56
while (left < nextLeft) 这里会infinity loop~你可以试试{1, 2, 3, 2, 4}和k = 3这个test case

谢谢建议~不过我 run 了一下好像 infinity loop,输出是 9
回复

使用道具 举报

🔗
liutsi 2022-7-30 17:30:28 | 只看该作者
全局:
是不是错在这里?
long res = -1?
如果数组里全是负数(股价有没有可能是负数?),试试res = Integer.MIN_VALUE呢?

补充内容 (2022-07-30 17:35 +8:00):
哈哈,回太早了,没事了。。。
回复

使用道具 举报

全局:
南宫狗剩 发表于 2022-07-24 18:53:52
碰到重复数字不能直接把curSum直接清0,也不能把left直接放到right那里,举个例子:
arr = , k = 3
当读到第二个2时,你把curSum清0,然后从2开始往后找,最后你算出来
谢谢指证🙏
回复

使用道具 举报

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

本版积分规则

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