1224.最大相等频率
This commit is contained in:
parent
7e1045ccca
commit
d764340d0a
|
@ -188,6 +188,7 @@ mod q1190;
|
|||
mod q1202;
|
||||
mod q1203;
|
||||
mod q1218;
|
||||
mod q1224;
|
||||
mod q1269;
|
||||
mod q1281;
|
||||
mod q1282;
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
use crate::Solution;
|
||||
|
||||
impl Solution {
|
||||
/// [1224.最大相等频率](https://leetcode.cn/problems/maximum-equal-frequency/)
|
||||
///
|
||||
/// 2022-08-18 09:38:43
|
||||
///
|
||||
/// 给你一个正整数数组 `nums`,请你帮忙从该数组中找出能满足下面要求的 **最长** 前缀,并返回该前缀的长度:
|
||||
///
|
||||
/// * 从前缀中 **恰好删除一个** 元素后,剩下每个数字的出现次数都相同。
|
||||
///
|
||||
/// 如果删除这个元素后没有剩余元素存在,仍可认为每个数字都具有相同的出现次数(也就是 0 次)。
|
||||
///
|
||||
/// + **示例 1:**
|
||||
/// + **输入:** nums = \[2,2,1,1,5,3,3,5\]
|
||||
/// + **输出:** 7
|
||||
/// + **解释:** 对于长度为 7 的子数组 \[2,2,1,1,5,3,3\],如果我们从中删去 nums\[4\] = 5,就可以得到 \[2,2,1,1,3,3\],里面每个数字都出现了两次。
|
||||
/// + **示例 2:**
|
||||
/// + **输入:** nums = \[1,1,1,2,2,2,3,3,3,4,4,4,5\]
|
||||
/// + **输出:** 13
|
||||
/// + **提示:**
|
||||
/// * `2 <= nums.length <= 10^5`
|
||||
/// * `1 <= nums[i] <= 10^5`
|
||||
/// + Related Topics
|
||||
/// * 数组
|
||||
/// * 哈希表
|
||||
pub fn max_equal_freq(nums: Vec<i32>) -> i32 {
|
||||
let (mut count, mut freq) = (std::collections::HashMap::<i32, i32>::new(), std::collections::HashMap::<i32, i32>::new());
|
||||
let (mut r, mut m) = (0, 0);
|
||||
for i in 0..nums.len() {
|
||||
let c = count.entry(nums[i]).or_default();
|
||||
if *c > 0 {
|
||||
*freq.entry(*c).or_default() -= 1;
|
||||
}
|
||||
*c += 1;
|
||||
m = m.max(*c);
|
||||
*freq.entry(*c).or_default() += 1;
|
||||
if m == 1 || *freq.get(&m).unwrap() * m + *freq.get(&(m - 1)).unwrap_or(&0) * (m - 1) == i as i32 + 1 && *freq.get(&m).unwrap() == 1 || *freq.get(&m).unwrap() * m + 1 == i as i32 + 1 && *freq.get(&1).unwrap_or(&0) == 1 {
|
||||
r = r.max(i + 1);
|
||||
}
|
||||
}
|
||||
r as i32
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::Solution;
|
||||
|
||||
#[test]
|
||||
fn test_q1224() {
|
||||
assert_eq!(Solution::max_equal_freq(vec![2, 2, 1, 1, 5, 3, 3, 5]), 7);
|
||||
assert_eq!(Solution::max_equal_freq(vec![1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5]), 13);
|
||||
assert_eq!(Solution::max_equal_freq(vec![1, 1, 1, 2, 2, 2]), 5);
|
||||
assert_eq!(Solution::max_equal_freq(vec![10, 2, 8, 9, 3, 8, 1, 5, 2, 3, 7, 6]), 8);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue