Input:s =[1,1,1,1,1,1]Output: 6Explanation:
`[1, 1, 1, 1, 1]`is the only subsequence of size 5 that can be formed, and it
has a unique middle mode of 1. This subsequence can be formed in6 different
ways, so the output is6.
Input:s =[1,2,2,3,3,4]Output: 4Explanation:
`[1, 2, 2, 3, 4]` and `[1, 2, 3, 3, 4]` each have a unique middle mode because
the number at index 2 has the greatest frequency in the subsequence.`[1, 2,
2, 3, 3]` does not have a unique middle mode because 2 and 3 appear twice.
We need to count all subsequences of length 5 where the middle element is the unique mode. Since n ≤ 1000, we can enumerate all possible 5-element subsequences (using 5 nested loops or combinations), check the mode, and count if the middle is the unique mode.
import java.util.*;
classSolution {
publicintcountSubsequences(int[] nums) {
int MOD = 1_000_000_007, n = nums.length;
long ans = 0;
for (int i = 0; i < n; ++i)
for (int j = i+1; j < n; ++j)
for (int k = j+1; k < n; ++k)
for (int l = k+1; l < n; ++l)
for (int m = l+1; m < n; ++m) {
int[] seq = {nums[i], nums[j], nums[k], nums[l], nums[m]};
Map<Integer, Integer> freq =new HashMap<>();
for (int x : seq) freq.put(x, freq.getOrDefault(x, 0) + 1);
int maxf = 0, cnt = 0, mode = 0;
for (int v : freq.keySet()) {
int f = freq.get(v);
if (f > maxf) { maxf = f; cnt = 1; mode = v; }
elseif (f == maxf) cnt++;
}
if (cnt == 1 && seq[2]== mode) ans = (ans + 1) % MOD;
}
return (int)ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
funcountSubsequences(nums: IntArray): Int {
val MOD = 1_000_000_007
val n = nums.size
var ans = 0Lfor (i in0 until n)
for (j in i+1 until n)
for (k in j+1 until n)
for (l in k+1 until n)
for (m in l+1 until n) {
val seq = listOf(nums[i], nums[j], nums[k], nums[l], nums[m])
val freq = seq.groupingBy { it }.eachCount()
val maxf = freq.values.maxOrNull() ?:0val modes = freq.filterValues { it== maxf }.keys
if (modes.size ==1&& seq[2] == modes.first()) ans = (ans + 1) % MOD
}
return ans.toInt()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
defcountSubsequences(nums):
from collections import Counter
MOD =10**9+7 n = len(nums)
ans =0for i in range(n):
for j in range(i+1, n):
for k in range(j+1, n):
for l in range(k+1, n):
for m in range(l+1, n):
seq = [nums[i], nums[j], nums[k], nums[l], nums[m]]
freq = Counter(seq)
maxf = max(freq.values())
modes = [x for x in freq if freq[x] == maxf]
if len(modes) ==1and seq[2] == modes[0]:
ans = (ans +1) % MOD
return ans
use std::collections::HashMap;
pubfncount_subsequences(nums: Vec<i32>) -> i32 {
let modulo =1_000_000_007;
let n = nums.len();
letmut ans =0i64;
for i in0..n {
for j in i+1..n {
for k in j+1..n {
for l in k+1..n {
for m in l+1..n {
let seq = [nums[i], nums[j], nums[k], nums[l], nums[m]];
letmut freq = HashMap::new();
for&x in&seq { *freq.entry(x).or_insert(0) +=1; }
let maxf =*freq.values().max().unwrap();
let modes: Vec<_>= freq.iter().filter(|(_, &v)| v == maxf).map(|(&k, _)| k).collect();
if modes.len() ==1&& seq[2] == modes[0] { ans = (ans +1) % modulo; }
}
}
}
}
}
ans asi32}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
functioncountSubsequences(nums: number[]):number {
constMOD=1e9+7;
constn=nums.length;
letans=0;
for (leti=0; i<n; ++i)
for (letj=i+1; j<n; ++j)
for (letk=j+1; k<n; ++k)
for (letl=k+1; l<n; ++l)
for (letm=l+1; m<n; ++m) {
constseq= [nums[i], nums[j], nums[k], nums[l], nums[m]];
constfreq: Record<number, number> = {};
for (constxofseq) freq[x] = (freq[x] ||0) +1;
constmaxf= Math.max(...Object.values(freq));
constmodes= Object.keys(freq).filter(x=>freq[+x] ===maxf).map(Number);
if (modes.length===1&&seq[2] ===modes[0]) ans= (ans+1) %MOD;
}
returnans;
}