Skip to content

Commit 69c6efc

Browse files
authored
feat: add solutions to lc problem: No.1838 (#2580)
No.1838.Frequency of the Most Frequent Element
1 parent 1182869 commit 69c6efc

14 files changed

+506
-678
lines changed

solution/1800-1899/1838.Frequency of the Most Frequent Element/README.md

+158-220
Large diffs are not rendered by default.

solution/1800-1899/1838.Frequency of the Most Frequent Element/README_EN.md

+159-207
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,30 @@
1-
class Solution {
2-
public:
3-
int maxFrequency(vector<int>& nums, int k) {
4-
sort(nums.begin(), nums.end());
5-
int n = nums.size();
6-
int ans = 1;
7-
long long window = 0;
8-
for (int l = 0, r = 1; r < n; ++r) {
9-
window += 1LL * (nums[r] - nums[r - 1]) * (r - l);
10-
while (window > k) {
11-
window -= (nums[r] - nums[l++]);
12-
}
13-
ans = max(ans, r - l + 1);
14-
}
15-
return ans;
16-
}
1+
class Solution {
2+
public:
3+
int maxFrequency(vector<int>& nums, int k) {
4+
int n = nums.size();
5+
sort(nums.begin(), nums.end());
6+
long long s[n + 1];
7+
s[0] = 0;
8+
for (int i = 1; i <= n; ++i) {
9+
s[i] = s[i - 1] + nums[i - 1];
10+
}
11+
int l = 1, r = n;
12+
auto check = [&](int m) {
13+
for (int i = m; i <= n; ++i) {
14+
if (1LL * nums[i - 1] * m - (s[i] - s[i - m]) <= k) {
15+
return true;
16+
}
17+
}
18+
return false;
19+
};
20+
while (l < r) {
21+
int mid = (l + r + 1) >> 1;
22+
if (check(mid)) {
23+
l = mid;
24+
} else {
25+
r = mid - 1;
26+
}
27+
}
28+
return l;
29+
}
1730
};
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
1-
func maxFrequency(nums []int, k int) int {
2-
sort.Ints(nums)
3-
ans, window := 1, 0
4-
for l, r := 0, 1; r < len(nums); r++ {
5-
window += (nums[r] - nums[r-1]) * (r - l)
6-
for window > k {
7-
window -= nums[r] - nums[l]
8-
l++
9-
}
10-
ans = max(ans, r-l+1)
11-
}
12-
return ans
1+
func maxFrequency(nums []int, k int) int {
2+
n := len(nums)
3+
sort.Ints(nums)
4+
s := make([]int, n+1)
5+
for i, x := range nums {
6+
s[i+1] = s[i] + x
7+
}
8+
check := func(m int) bool {
9+
for i := m; i <= n; i++ {
10+
if nums[i-1]*m-(s[i]-s[i-m]) <= k {
11+
return true
12+
}
13+
}
14+
return false
15+
}
16+
l, r := 1, n
17+
for l < r {
18+
mid := (l + r + 1) >> 1
19+
if check(mid) {
20+
l = mid
21+
} else {
22+
r = mid - 1
23+
}
24+
}
25+
return l
1326
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,35 @@
1-
class Solution {
2-
public int maxFrequency(int[] nums, int k) {
3-
Arrays.sort(nums);
4-
int n = nums.length;
5-
int ans = 1, window = 0;
6-
for (int l = 0, r = 1; r < n; ++r) {
7-
window += (nums[r] - nums[r - 1]) * (r - l);
8-
while (window > k) {
9-
window -= (nums[r] - nums[l++]);
10-
}
11-
ans = Math.max(ans, r - l + 1);
12-
}
13-
return ans;
14-
}
1+
class Solution {
2+
private int[] nums;
3+
private long[] s;
4+
private int k;
5+
6+
public int maxFrequency(int[] nums, int k) {
7+
this.k = k;
8+
this.nums = nums;
9+
Arrays.sort(nums);
10+
int n = nums.length;
11+
s = new long[n + 1];
12+
for (int i = 1; i <= n; ++i) {
13+
s[i] = s[i - 1] + nums[i - 1];
14+
}
15+
int l = 1, r = n;
16+
while (l < r) {
17+
int mid = (l + r + 1) >> 1;
18+
if (check(mid)) {
19+
l = mid;
20+
} else {
21+
r = mid - 1;
22+
}
23+
}
24+
return l;
25+
}
26+
27+
private boolean check(int m) {
28+
for (int i = m; i <= nums.length; ++i) {
29+
if (1L * nums[i - 1] * m - (s[i] - s[i - m]) <= k) {
30+
return true;
31+
}
32+
}
33+
return false;
34+
}
1535
}

solution/1800-1899/1838.Frequency of the Most Frequent Element/Solution.js

-19
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
1-
class Solution:
2-
def maxFrequency(self, nums: List[int], k: int) -> int:
3-
nums.sort()
4-
l, r, n = 0, 1, len(nums)
5-
ans, window = 1, 0
6-
while r < n:
7-
window += (nums[r] - nums[r - 1]) * (r - l)
8-
while window > k:
9-
window -= nums[r] - nums[l]
10-
l += 1
11-
r += 1
12-
ans = max(ans, r - l)
13-
return ans
1+
class Solution:
2+
def maxFrequency(self, nums: List[int], k: int) -> int:
3+
def check(m: int) -> bool:
4+
for i in range(m, n + 1):
5+
if nums[i - 1] * m - (s[i] - s[i - m]) <= k:
6+
return True
7+
return False
8+
9+
n = len(nums)
10+
nums.sort()
11+
s = list(accumulate(nums, initial=0))
12+
l, r = 1, n
13+
while l < r:
14+
mid = (l + r + 1) >> 1
15+
if check(mid):
16+
l = mid
17+
else:
18+
r = mid - 1
19+
return l
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
function maxFrequency(nums: number[], k: number): number {
2-
nums.sort((a, b) => a - b);
3-
let ans = 1;
4-
let window = 0;
52
const n = nums.length;
6-
for (let l = 0, r = 1; r < n; ++r) {
7-
window += (nums[r] - nums[r - 1]) * (r - l);
8-
while (window > k) {
9-
window -= nums[r] - nums[l++];
3+
nums.sort((a, b) => a - b);
4+
const s: number[] = Array(n + 1).fill(0);
5+
for (let i = 1; i <= n; ++i) {
6+
s[i] = s[i - 1] + nums[i - 1];
7+
}
8+
let [l, r] = [1, n];
9+
const check = (m: number): boolean => {
10+
for (let i = m; i <= n; ++i) {
11+
if (nums[i - 1] * m - (s[i] - s[i - m]) <= k) {
12+
return true;
13+
}
14+
}
15+
return false;
16+
};
17+
while (l < r) {
18+
const mid = (l + r + 1) >> 1;
19+
if (check(mid)) {
20+
l = mid;
21+
} else {
22+
r = mid - 1;
1023
}
11-
ans = Math.max(ans, r - l + 1);
1224
}
13-
return ans;
25+
return l;
1426
}
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,16 @@
1-
class Solution {
2-
public:
3-
int maxFrequency(vector<int>& nums, int k) {
4-
sort(nums.begin(), nums.end());
5-
int n = nums.size();
6-
long long s[n + 1];
7-
s[0] = 0;
8-
for (int i = 0; i < n; ++i) {
9-
s[i + 1] = s[i] + nums[i];
10-
}
11-
int left = 1, right = n;
12-
auto check = [&](int cnt) {
13-
for (int i = 0; i < n + 1 - cnt; ++i) {
14-
int j = i + cnt - 1;
15-
if (1LL * nums[j] * cnt - (s[j + 1] - s[i]) <= k) {
16-
return true;
17-
}
18-
}
19-
return false;
20-
};
21-
while (left < right) {
22-
int mid = (left + right + 1) >> 1;
23-
if (check(mid)) {
24-
left = mid;
25-
} else {
26-
right = mid - 1;
27-
}
28-
}
29-
return left;
30-
}
1+
class Solution {
2+
public:
3+
int maxFrequency(vector<int>& nums, int k) {
4+
sort(nums.begin(), nums.end());
5+
int ans = 1;
6+
long long s = 0;
7+
for (int i = 1, j = 0; i < nums.size(); ++i) {
8+
s += 1LL * (nums[i] - nums[i - 1]) * (i - j);
9+
while (s > k) {
10+
s -= nums[i] - nums[j++];
11+
}
12+
ans = max(ans, i - j + 1);
13+
}
14+
return ans;
15+
}
3116
};
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,13 @@
1-
func maxFrequency(nums []int, k int) int {
2-
sort.Ints(nums)
3-
n := len(nums)
4-
s := make([]int, n+1)
5-
for i, x := range nums {
6-
s[i+1] = s[i] + x
7-
}
8-
left, right := 1, n
9-
check := func(cnt int) bool {
10-
for i := 0; i < n+1-cnt; i++ {
11-
j := i + cnt - 1
12-
if nums[j]*cnt-(s[j+1]-s[i]) <= k {
13-
return true
14-
}
15-
}
16-
return false
17-
}
18-
for left < right {
19-
mid := (left + right + 1) >> 1
20-
if check(mid) {
21-
left = mid
22-
} else {
23-
right = mid - 1
24-
}
25-
}
26-
return left
1+
func maxFrequency(nums []int, k int) int {
2+
sort.Ints(nums)
3+
ans := 1
4+
s := 0
5+
for i, j := 1, 0; i < len(nums); i++ {
6+
s += (nums[i] - nums[i-1]) * (i - j)
7+
for ; s > k; j++ {
8+
s -= nums[i] - nums[j]
9+
}
10+
ans = max(ans, i-j+1)
11+
}
12+
return ans
2713
}
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,15 @@
1-
class Solution {
2-
private long[] s;
3-
private int[] nums;
4-
private int n;
5-
private int k;
6-
7-
public int maxFrequency(int[] nums, int k) {
8-
n = nums.length;
9-
Arrays.sort(nums);
10-
this.nums = nums;
11-
this.s = new long[n + 1];
12-
for (int i = 0; i < n; ++i) {
13-
s[i + 1] = s[i] + nums[i];
14-
}
15-
this.k = k;
16-
int left = 1, right = n;
17-
while (left < right) {
18-
int mid = (left + right + 1) >>> 1;
19-
if (check(mid)) {
20-
left = mid;
21-
} else {
22-
right = mid - 1;
23-
}
24-
}
25-
return left;
26-
}
27-
28-
private boolean check(int cnt) {
29-
for (int i = 0; i < n + 1 - cnt; ++i) {
30-
int j = i + cnt - 1;
31-
if (1L * nums[j] * cnt - (s[j + 1] - s[i]) <= k) {
32-
return true;
33-
}
34-
}
35-
return false;
36-
}
1+
class Solution {
2+
public int maxFrequency(int[] nums, int k) {
3+
Arrays.sort(nums);
4+
int ans = 1;
5+
long s = 0;
6+
for (int i = 1, j = 0; i < nums.length; ++i) {
7+
s += 1L * (nums[i] - nums[i - 1]) * (i - j);
8+
while (s > k) {
9+
s -= nums[i] - nums[j++];
10+
}
11+
ans = Math.max(ans, i - j + 1);
12+
}
13+
return ans;
14+
}
3715
}

0 commit comments

Comments
 (0)