美文网首页
计算数组中各类型的数有几种,分别是什么

计算数组中各类型的数有几种,分别是什么

作者: 孙睿888 | 来源:发表于2016-08-24 09:20 被阅读0次

    如题,对于一个数组 int [] arr={10,12,12,2,2};,
    含有10 12 2 三种数,每种数的个数分别为1,2,2
    输出的结果为10 出现过1次 12出现过两次 2出现过两次

    想法:利用键值对存储,键是数组中不重复的值
    值是那些数字出现的次数
    遍历这个数组,对数组的每一个数都判断这个数字之前出现过没有。
    若没出现过,加入键数组,并且值加1.若出现过,遍历键数组
    判断在哪出现过,并且将其值加1
    代码如下:
    public class Count{
    public static void main(String [] args)
    {
    int [] arr={10,12,12,2,2};
    int count=0; //记录出现的类型总数
    int[] jian=new int [arr.length];
    int[] zhi=new int[arr.length];
    int i=0;int j=0; //记录键值的递增
    for(int a=0;a<arr.length;a++)
    {
    if(b(arr,arr[a],a))
    //判断从0-a是否出现过,没出现过加入键值对
    {
    count++;
    jian[i++]=arr[a];
    zhi[j++]++;
    }
    else //出现过判断是哪一个键值对
    {
    int temp=nayi(jian,arr[a]);
    if(temp==-1)
    {
    System.out.println("出错啦"+arr[a]+"%%"+a);
    }
    else
    zhi[temp]++;
    }
    }
    System.out.println("出现过"+count+"种类型,分别是");
    for(int u=0;u<=i-1;u++) //-1因为i有自增操作比长度大一
    {
    System.out.println(jian[u]+"出现过"+zhi[u]+"次");
    }
    }
    public static boolean b(int arr[],int n,int m){ //判断以前n出现过没有 m下标
    for(int a=0;a<m;a++)
    {
    if(n==arr[a])
    return false;
    }
    return true;
    }
    public static int nayi(int jian[],int n)//判断出现过的n在哪个键值对出现
    {
    for(int a=0;a<jian.length;a++)
    {
    if(n==jian[a])
    return a;
    }
    return -1;
    }
    }

    相关文章

      网友评论

          本文标题:计算数组中各类型的数有几种,分别是什么

          本文链接:https://www.haomeiwen.com/subject/upgnsttx.html