有一个数组比如:int temp[]={1,1,2,3,3,3,3,4,4,4,5,4}
现在有一个要求:
将数组从开始每3个当成一个小组,计算temp中不同元素的个数,并建立一个新数组
如:         不同个数    
1,1,2      2
3,3,3      1
3,4,4      2
4,5,4      2
所以总个数为:7
输出个数:7
建立的新数组为temp2={1,2,3,3,4,4,5}

解决方案 »

  1.   

    package others;
    import java.util.*;public class Test04 {


    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    int temp[]={1,1,2,3,3,3,3,4,4,4,5,4};
    int p=0;
    boolean isDef[]=new boolean[temp.length];
    while(p<temp.length){
    for(int i=0;i<3;i++)
    for(int j=i+1;j<3;j++)
    if(temp[p+i]==temp[p+j])isDef[p+j]=true;
    p=p+3;
    }
    int k=0;
    ArrayList<Integer> rslt=new ArrayList<Integer>();
    for(int i=0;i<temp.length;i++)
    if(isDef[i]==false){
    k++;
    rslt.add(temp[i]);
    }
    System.out.println("不同的个数:"+k);
    System.out.println(rslt);
    }}
      

  2.   

    public class test{
    static int[] getIntArr(int[] arr,int grpN){
    int[] result = new int[arr.length];
    int len = 0;
    int relen = 0;
    while(len<arr.length){
    int ti = len;
    int temi = relen;
    for(int i=ti;i<(ti+grpN);i++){
    boolean flag = true;
    for(int j=temi+1;j<(temi+grpN);j++){
    if(j>=result.length-1)break;
    if( result[j]==arr[len] ){
    flag = false;
    }
    }
    if(flag)result[++relen] = arr[len];
    len++;
    if(len>=arr.length-1)break;
    }
    } int[] re = new int[relen];
    for(int i=0;i<relen;i++){
    re[i] = result[i+1];
    System.out.println(re[i]);
    }
    return re;
    } public static void main(String[] args){
    int[] arr = {1,2,2,2,2,2,5,6,6,7};
    int[] result = getIntArr(arr,3); }
    };
      

  3.   

    楼上代码有误例如这里有越界的可能
    re[i] = result[i+1];
      

  4.   

    我最喜欢凑这种热闹了:
    public void fun10() {
    int ints[] = { 1, 1, 2, 3, 3, 3, 3, 4, 4, 4, 5, 4 };
    Set set = new HashSet();
    List list = new ArrayList();
    int count = 0;

    for (int i = 0; i < ints.length; i++) {
    int temp = ints[i];
    int size = set.size();
    set.add(new Integer(temp));
    if(size != set.size()){
    list.add(new Integer(temp));
    }
    count++;
    if(count == 3){
    Conica.pl(temp+" "+set.size()+"个不同");
    count = 0;
    set.clear();
    }else{
    Conica.pr(temp+",");
    }
    }
    Conica.pl("list is:"+list);
    int[] newInts = new int[list.size()];
    for(int k=0; k<list.size() ;k++){
    newInts[k] = ((Integer)list.get(k)).intValue();
    }
    Conica.pr(newInts);
    }
      

  5.   

    public static int[] filter(int[] temp,int groupSize) {
            List list=new ArrayList();
            int cur=0;
            while(cur<temp.length){
                Set set=new TreeSet();  //如果不需要顺序,使用HashSet
                for(int i=0;i<Math.min(groupSize,temp.length-cur);i++){
                    set.add(new Integer(temp[cur+i]));
                }
                list.addAll(set);
                cur+=groupSize;
            }
            int[] ret=new int[list.size()];
            for(int i=0;i<list.size();i++){
                ret[i]=((Integer)list.get(i)).intValue();
            }
            return ret;
        }
      

  6.   

    lydvqq(碧水情缘♀黑哥) 老兄的程序 for(int j=temi+1;j<(temi+grpN);j++)是不是和题目说的不一样啊??例如当1,1,2的第二个1比较时老兄的程序是不是还得循环3次??那就和题目有矛盾了 ,还有re[i] = result[i+1];有越界的可能