问题描述
- oj 题聪明的员工怎么做?
-
题目描述
小新是一家公司的员工,每个员工都有一个编号。每天上班时,老板都让员工排成一个队伍。但是,每次老板都对队伍的顺序不满意,于是老板重新编排新的队伍顺序,然后让员工按顺序排好。老板有特别要求,队伍每次只能将其中一个人移动到队头。聪明的小新很快想到最少移动次数使得队伍的顺序跟老板指定的顺序一样。愚蠢的老板不清楚小新是怎么做到的,聪明的你编写程序告诉ta。输入
第一行是T(T<=10),代表数据的组数。
对于每组数据,第1行是一个整数n(2<=n<=30),代表员工的数量。第2行有n个数,代表员工一开始的队伍顺序的编号。第3行有n个数,代表老板要求的队伍顺序的编号。员工的编号为s(1<=s<=n),且不会重复。输出
输出最少的移动次数。样例输入
2
4
2 1 3 4
1 2 3 4
3
2 1 3
3 1 2
样例输出
1
2
解决方案
书本上都有的选择排序。
public class ChoiceSort {
public static void _choiceSort(Integer[] a) {
if (a == null || a.length <= 0) {
return;
}
for (int i = 0; i < a.length; i++) {
int min = i; /* 将当前下标定义为最小值下标 */
for (int j = i + 1; j < a.length; j++) {
if (a[min] > a[j]) { /* 如果有小于当前最小值的关键字 */
min = j; /* 将此关键字的下标赋值给min */
}
}
if (i != min) {/* 若min不等于i,说明找到最小值,交换 */
int tmp = a[min];
a[min] = a[i];
a[i] = tmp;
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer[] list={49,38,65,97,76,13,27,14,10};
//快速排序
/* QuicSort qs=new QuicSort();
qs.quick(list);*/
//冒泡排序
/* BubbleSort bs=new BubbleSort();
bs.bubble(list);*/
//选择排序
ChoiceSort._choiceSort(list);
for(int i=0;i<list.length;i++){
System.out.print(list[i]+" ");
}
System.out.println();
}
解决方案二:
其实就是选择排序,要求交换次序足够少。
解决方案三:
如果你完全不懂选择排序,你没有做这道题的基础。换一句话说,给你代码,你也学习不到任何东西,等你学会了以后再来做题。
做题的目的是运用你的知识,而不是满足一种虚荣心或者自欺欺人。
解决方案四:
任何一本数据结构的书上都有。等你念到大学二年级就会学到。
解决方案五:
如果你真的想学,你就去学。掌握原理,而不是找个枪手做题后你复制粘贴下。
我确定如果你根本没有学过排序算法,这种题你是不可能做出来的。
要学的是你,不是我们。
解决方案六:
如果你学过了,知道大致方法,只是有的地方还没完全理解,那你看别人的程序才有收获。
好比你看了java的程序,你完全是看不懂的。因为原理你还是不掌握。
你这种把题目搬过来,再把答案搬回去,不是学习,只是满足下虚荣心而已。
时间: 2024-09-23 19:21:40