第2个回答 2010-12-12
见代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class LongestSame {
public static void main(String[] args) {
//测试数据
ArrayList<Integer> a = new ArrayList<Integer>();
a.add(3);
a.add(1);
a.add(12);
a.add(42);
a.add(3);
a.add(47);
a.add(3);
a.add(42);
//输出最长的相同子集
System.out.println("最长的相同子集=" + LongestSame.longestSub(a));
}
public static List<Integer> longestSub(ArrayList<Integer> list) {
//将list按从小到大的顺序排序
Collections.sort(list);
//计数器
int count = 0;
//最大元素个数
int max = 0;
//最大元素数值
Integer flag = null;
List<Integer> subList = new ArrayList<Integer>();
for (int i = 0; i < list.size(); i++) {
//判断是否存在该元素,存在则计数器count加1
if (flag != null && flag.intValue() == list.get(i).intValue()) {
count++;
//当最大子集不唯一
if (count == max) {
//装填子集元素
for (int j = 0; j < max; j++) {
subList.add(list.get(i));
}
}
//当最大子集唯一时
if (count > max) {
max = count;
//清空原有子集元素
subList.clear();
//装填新的子集元素
for (int j = 0; j < max; j++) {
subList.add(list.get(i));
}
}
} else {
//当元素不存在时,将计数器初始化为1
flag = list.get(i);
count = 1;
}
}
//返回子集元素list
return subList;
}
}
第3个回答 2010-12-12
我这里用的是数组,功能一样
public class LongestSame {
private int[] lists;
//初始化lists
public LongestSame(){
lists = new int[]{2,5,5,6,6,7,7,8,2,4,5,5,6,6,7,9};
getList();
}
public void getList(){
//从list[0]开始取,最长为list.length-1,除本身外,试想一下,如果全是1
//定义两个数组来存储相同长度的数字
int []list1,list2;
if(lists != null) {
//循环lists数组里面的值,15个到1个
for(int i=0; i<lists.length-1; i++) {
list1 = new int[lists.length-i-1];
list2 = new int[lists.length-i-1];
//这个循环是为了区分当list1开始从第m个数字记数时,第二个list2可以从往前一个"m+1"或往后第"m-j"个开始记数
for(int j=0; j<i+1; j++) {
//用来记相同数字循最多的次数,循环时会从多到少即15个到1个
int number=0;
//这个循环开始记数
for(int m=i; m<lists.length-1; m++) {
list1[m-i] = lists[m];
list2[m-i] = lists[m+1];
//当list1从第二个数开始记数时,list2就可以从前后记数
if(j>0) {
list2[m-i] = lists[m-j];
}
//当两个数相同
if(list1[m-i] == list2[m-i]) {
number++;
//当记数为最多时
if(number == (lists.length-i-1)) {
System.out.print("最长的相同子集是:");
for(int n=0; n<list1.length; n++) {
System.out.print(list1[n]+",");
}
return;
}
}
}
}
}
}
}
public static void main(String[] args) {
new LongestSame();
}
}
记得要给分,呵呵花了一个多钟呢
第5个回答 2010-12-12
你为什么要写成(ItemListener) this那样子呢?
对象.additemListener()的这个方法,方法的参数就是一个继承了监听器类的类、或者是一个实现了监听器接口的类。因此,通常的使用方法有如下两种:
1.让主类去实现监听器接口,然后,对象.additemListener(this),并且,在主类中重写相应的方法(如actionPerform());
2.直接:
对象.additemListener(new java.awt.event.ActionListener());
一般都是通过以上的两个方法实现事件的监听的,而不用“(ItemListener) this”这么别扭的写法,也没什么必要。