<script>
function
getMinimumOps(ar, k)
{
let n = ar.length;
let dp =
new
Array(n);
for
(let i = 0; i < dp.length; i++)
{
dp[i] =
new
Array(k+1);
for
(let j = 0; j < (k + 1); j++)
{
dp[i][j] = 0;
}
}
dp[0][1] = 0;
for
(let i = 1; i < n; i++)
{
let maxGroups = Math.min(k, i + 1);
for
(let j = 1; j <= maxGroups; j++)
{
dp[i][j] = Number.MAX_VALUE;
if
(j == 1)
{
let freq =
new
Array(100000);
for
(let i=0;i<freq.length;i++)
{
freq[i]=0;
}
let freqOfMode = 0;
for
(let it = 0; it <= i; it++)
{
freq[ar[it]]++;
let newElementFreq = freq[ar[it]];
if
(newElementFreq > freqOfMode)
freqOfMode = newElementFreq;
}
dp[i][1] = (i + 1) - freqOfMode;
}
else
{
let freq =
new
Array(100000);
for
(let i = 0; i < freq.length; i++)
{
freq[i] = 0;
}
let freqOfMode = 0;
for
(let it = i; it >= j - 1; it--)
{
freq[ar[it]]++;
let newElementFreq = freq[ar[it]];
if
(newElementFreq > freqOfMode)
freqOfMode = newElementFreq;
let elementsToChange = i - it + 1;
elementsToChange -= freqOfMode;
dp[i][j] = Math.min(dp[it - 1][j - 1] +
elementsToChange, dp[i][j]);
}
}
}
}
return
dp[n - 1][k];
}
let k = 3;
let ar=[3, 1, 3, 3, 2, 1, 8, 5 ];
document.write(getMinimumOps(ar, k));
</script>