![JAR search and dependency download from the Maven repository](/logo.png)
g1201_1300.s1224_maximum_equal_frequency.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g1201_1300.s1224_maximum_equal_frequency;
// #Hard #Array #Hash_Table #2022_03_12_Time_17_ms_(93.59%)_Space_76.9_MB_(39.74%)
/**
* 1224 - Maximum Equal Frequency\.
*
* Hard
*
* Given an array `nums` of positive integers, return the longest possible length of an array prefix of `nums`, such that it is possible to remove **exactly one** element from this prefix so that every number that has appeared in it will have the same number of occurrences.
*
* If after removing one element there are no remaining elements, it's still considered that every appeared number has the same number of ocurrences (0).
*
* **Example 1:**
*
* **Input:** nums = [2,2,1,1,5,3,3,5]
*
* **Output:** 7
*
* **Explanation:** For the subarray [2,2,1,1,5,3,3] of length 7, if we remove nums[4] = 5, we will get [2,2,1,1,3,3], so that each number will appear exactly twice.
*
* **Example 2:**
*
* **Input:** nums = [1,1,1,2,2,2,3,3,3,4,4,4,5]
*
* **Output:** 13
*
* **Constraints:**
*
* * 2 <= nums.length <= 105
* * 1 <= nums[i] <= 105
**/
public class Solution {
public int maxEqualFreq(int[] nums) {
int[] count = new int[100001];
int[] freq = new int[100001];
int n = nums.length;
for (int num : nums) {
count[num]++;
freq[count[num]]++;
}
for (int i = n - 1; i > 0; i--) {
if (freq[count[nums[i]]] * count[nums[i]] == i) {
return i + 1;
}
freq[count[nums[i]]]--;
count[nums[i]]--;
if (freq[count[nums[i - 1]]] * count[nums[i - 1]] == i) {
return i + 1;
}
}
return 1;
}
}