🤠 原题地址
⭐ 预先压缩数组
⭐ 局部的最小值 >= 全局最小值
import java.util.Scanner;
public class Main
{
static int N = 5010;
static int[] color = new int[N];
static int[][] f = new int[N][N];
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
color[1] = sc.nextInt();
int last = color[1];
int idx = 1;
for (int i = 2; i <= n; i++)
{
int x = sc.nextInt();
if (x != last)
color[++idx] = x;
last = color[idx];
}
n = idx;
for (int len = 2; len <= n; len++)
{
for (int l = 1, r = l + len - 1; r <= n; l++, r++)
{
if (color[l] == color[r])
f[l][r] = f[l + 1][r - 1] + 1;
else
{
f[l][r] = Math.min(f[l + 1][r], f[l][r - 1]) + 1;
}
}
}
System.out.println(f[1][n]);
}
}