暴力做的,后来写完的,一开始只能过56,后来改了下,也不知道能不能过全部

public class Lianjia3 {
	
	private static boolean isTrue(int[] verify,int[] data, int n){
		for (int i=0;i<n;++i){
			if (verify[i]!=data[i]){
				return false;
			}
		}
		return true;
	}
	private static void swap(int i,int j,int[] data){
		int t=data[i];
		data[i]=data[j];
		data[j]=t;
	}
	private static int ans=Integer.MAX_VALUE;
	public static void solve(int index,int[] verify,int[] data,int n,int cur){
		if (isTrue(verify, data, n)){
			ans=Math.min(ans, cur);
			return;
		}
		if (verify[index]==data[index]){
			solve(index+1, verify, data, n, cur);
			return;
		}
			
			
		int id=-1;
		for (int j=index+1;j<n;++j){
			if(data[j]==verify[index] && verify[j]==data[index]){
				id=j;
				break;
			}
		}
		if(id!=-1){
			swap(index, id, data);	
			solve(index+1, verify, data, n, cur+1);
		}
		if (id==-1){
			for (int j=index+1;j<n;++j){
				if(data[j]==verify[index] && verify[j]!=data[j]){
					id=j;
					swap(index, j, data);	
					solve(index+1, verify, data,  n, cur+1);
					swap(index, j, data);	
				}
			}
		}
			
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		int[] data=new int[n];
		
		int oneCount=0;
		int twoCount=0;
		int threeCount=0;
		for (int i=0;i<n;++i){
			data[i]=in.nextInt();
			if (data[i]==1){
				oneCount++;
			}else if (data[i]==2){
				twoCount++;
			}else{
				threeCount++;
			}
		}
		int[] verify=new int[n];
		int i=0;
		for (int j=0;j<oneCount;++j){
			verify[i++]=1;
		}
		for (int j=0;j<twoCount;++j){
			verify[i++]=2;
		}
		for (int j=0;j<threeCount;++j){
			verify[i++]=3;
		}
		solve(0,verify, data, n, 0);
		System.out.println(ans);
		in.close();
	}

}