赞
踩
/** * @param {number[]} nums * @return {number} */ var maxEqualFreq = function(nums) { const freq = new Map(); const count = new Map(); let res = 0, maxFreq = 0; for (let i = 0; i < nums.length; i++) { if (!count.has(nums[i])) { count.set(nums[i], 0); } if (count.get(nums[i]) > 0) { freq.set(count.get(nums[i]), freq.get(count.get(nums[i])) - 1); } count.set(nums[i], count.get(nums[i]) + 1); maxFreq = Math.max(maxFreq, count.get(nums[i])); if (!freq.has(count.get(nums[i]))) { freq.set(count.get(nums[i]), 0); } freq.set(count.get(nums[i]), freq.get(count.get(nums[i])) + 1); const ok = maxFreq === 1 || freq.get(maxFreq) * maxFreq + freq.get(maxFreq - 1) * (maxFreq - 1) === i + 1 && freq.get(maxFreq) === 1 || freq.get(maxFreq) * maxFreq + 1 === i + 1 && freq.get(1) === 1; if (ok) { res = Math.max(res, i + 1); } } return res; };
执行结果:通过
执行用时:140 ms, 在所有 JavaScript 提交中击败了88.89%的用户
内存消耗:51 MB, 在所有 JavaScript 提交中击败了88.89%的用户
通过测试用例:45 / 45
function maxEqualFreq(nums: number[]): number {
let n = nums.length, max = 0, ans = 0
const cnt = new Array<number>(100010).fill(0), sum = new Array<number>(100010).fill(0)
for (let i = 0; i < n; i++) {
let t = nums[i], len = i + 1, cur = ++cnt[t]
sum[cur]++; sum[cur - 1]--;
max = Math.max(max, cur)
if (max == 1) ans = len
if (max * sum[max] + 1 == len) ans = len
if ((max - 1) * (sum[max - 1] + 1) + 1 == len) ans = len
}
return ans
};
执行结果:通过
执行用时:80 ms, 在所有 TypeScript 提交中击败了100.00%的用户
内存消耗:55.9 MB, 在所有 TypeScript 提交中击败了100.00%的用户
通过测试用例:45 / 45
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。