




















思路 一开始想了很多办法,但是无论哪种都是 O(n2) 的,直到我把思路写到纸上捋清楚。 遍历数组,如果用前缀和pre[]统计到当前位置主要元素与非主要元素的差值,那么以当前位置i为尾的主要元素子数组数量就是pre[i]-sum(pre[x])(其中pre[x]<pre[i])。 我们发现,我们需要的不是每个前缀的值pre[],而是前缀值的数量preCnt[]。这次我们统计用preCnt[]统计到当前位置i为止前缀值pre=x的数量,那么主要元素子数组的数量就是sum(preCnt[-n..pre-1])。 刚才的算法似乎还是 O(n2) 的,但我把它们列出来的时候发现似乎有捷径可以走。 拿第一个示例为例, nums[0] = 1 => pre[0] = -1 => ans[0] = sum(preCnt[-4..-2]) => preCnt[-1] = 1 nums[1] = 2 => pre[1] = 0 => ans[1] = sum(preCnt[-4..-1]) => preCnt[-1] = 1; preCnt[0] = 1; nums[2...
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。