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

[数组] 一道数组题,如何降到小于n^2的复杂度以下

全局:

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

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

x
本人小白,刷这道题时只想到暴力法,请问有没有什么好办法能够降低复杂度呢?先谢谢了!



上一篇:一道变形题的求助 严格单调递增数组
下一篇:讨论一道最短路径问题
全局:
把number的数组从后往前遍历,应该可以到O(n)。
回复

使用道具 举报

全局:
Stack 从右往左扫 stack里存的是 最大值和次数 当前等于最大就最大加1 不然不变。 遍利完了以后往外POP list里放的是次数  这样o(N] 就行
回复

使用道具 举报

推荐
onerhao 2021-1-29 11:06:49 | 只看该作者
全局:
千篇一律 发表于 2021-1-29 08:55
多谢,请看下下面这段代码,应该是这个思路吧,谢谢!
[mw_shl_code=python,true]def frequencyOfMaxVal ...

关键地方就在于那starting index是一维的,并不是求任意区间,所以复杂度可以做到O(n).
回复

使用道具 举报

全局:
用一个heap可以降到nlogn,暂时想到的就是这个
回复

使用道具 举报

🔗
 楼主| 千篇一律 2021-1-29 02:30:43 | 只看该作者

回帖奖励 +5

全局:
kylehuang 发表于 2021-1-28 12:55
用一个heap可以降到nlogn,暂时想到的就是这个

能详细讲一讲思路嘛?谢谢!
回复

使用道具 举报

🔗
kylehuang 2021-1-29 03:20:37 | 只看该作者
全局:
千篇一律 发表于 2021-1-29 02:30
能详细讲一讲思路嘛?谢谢!

下面哪个兄弟应该是对的,从后往前只需要一个counter,然后每次increment的时候跟当前max比较一下
回复

使用道具 举报

🔗
 楼主| 千篇一律 2021-1-29 08:55:27 | 只看该作者
全局:
abtesting769941 发表于 2021-1-28 14:15
把number的数组从后往前遍历,应该可以到O(n)。

多谢,请看下下面这段代码,应该是这个思路吧,谢谢!
  1. def frequencyOfMaxValue(numbers, q):
  2.   lis = []
  3.   ans = []
  4.   maxCount = 0
  5.   maxValue = -pow(2,31)
  6.   for i in range(len(numbers) - 1, -1, -1):
  7.     if numbers[i] == maxValue:
  8.       maxCount += 1
  9.     elif numbers[i] > maxValue:
  10.       maxValue = numbers[i]
  11.       maxCount = 1
  12.     lis.append(maxCount)
  13.   
  14.   lis = lis[::-1]

  15.   for i in range(len(q)):
  16.     ans.append(lis[q[i] - 1])

  17.   return ans
复制代码
回复

使用道具 举报

🔗
 楼主| 千篇一律 2021-1-29 08:56:21 | 只看该作者
全局:
kylehuang 发表于 2021-1-28 14:20
下面哪个兄弟应该是对的,从后往前只需要一个counter,然后每次increment的时候跟当前max比较一下

多谢,我按照这个思路写了一段代码,不知道对不对
回复

使用道具 举报

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

本版积分规则

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