例如如下数据:
{2,3,5,7,12,10}
{2,3,6,4,12,9}
{3,8,5,11,12,4}
上面的三条记录放在ArrayList里面,并且每条数据本身也是一个ArrayLis,每条记录的长度是一样的,现在想找出其中最小的一条记录,即只要前面的数字小就认为它是小的。也就是说我要得到的数据是{2,3,5,7,12,10}
用java有好的算法吗?最好能易读一点的
[b]问题补充:[/b]
能帮着写一下吗?
//说实在话,我又想起旅行商问题来了~
import java.util.ArrayList;
/**
*
@author Administrator
/
public class NewClass {
/
{2,3,5,7,12,10}
{2,3,6,4,12,9}
{3,8,5,11,12,4}
*/
ArrayList list1;
ArrayList list2;
ArrayList list3;
ArrayList list;
public static void main(String[] args) {
new NewClass().printFirst();
}
//打印列表的第一个元素
public void printFirst(){
this.toOne();
for (int i = 0; i < this.list1.size(); i++) {
System.out.print(list.get(0).get(i) + " ");
}
}
//算法在这里
private ArrayList toOne() {
this.initList(); //初始化各个List
//前提条件还是你说的那些...
int length = this.list1.size();
int flag = 0;
for(int i = 0 ; i < list.size() - 1; i++){
for(int j = i + 1 ; j < list.size(); j++){
if(i == j){
continue;
}
if(Integer.parseInt(list.get(i).get(flag).toString().trim()) < Integer.parseInt(list.get(i).get(flag).toString().trim())){
list.remove(j);
}else if(Integer.parseInt(list.get(i).get(flag).toString().trim()) > Integer.parseInt(list.get(i).get(flag).toString().trim())){
list.remove(i);
}
}
flag ++ ;
if(list.size() == 1){
break;
}
}
return list;
}
//初始化列表
private void initList() {
this.list1 = new ArrayList();
this.list2 = new ArrayList();
this.list3 = new ArrayList();
//list1变成{2,3,5,7,12,10}
list1.add(2);
list1.add(3);
list1.add(5);
list1.add(7);
list1.add(12);
list1.add(10);
//list2变成{2,3,6,4,12,9}
list2.add(2);
list2.add(3);
list2.add(6);
list2.add(4);
list2.add(12);
list2.add(9);
//list3变成{3,8,5,11,12,4}
list3.add(3);
list3.add(8);
list3.add(5);
list3.add(11);
list3.add(12);
list3.add(4);
//那个大的ArrayList是这样的
this.list = new ArrayList();
list.add(list1);
list.add(list2);
list.add(list3);
}
}
为什么不用二维数组呢?
只要控制好它的下标就可以实现你的算法了。至于代码应该不是很难写的。
Arrys.sort(list,Compareable);
class cc extend Compareable{
...............
}
直接数组+while就可以了,设置一个标记,比较出来了不是最小的,让while把它T出去,一次取数组的元素min()就可以了