0
点赞
收藏
分享

微信扫一扫

Java数组统计重复元素次数

暮晨夜雪 2022-04-13 阅读 74
java

在数组中不可避免有重复的元素,如果我们想统计重复的个数呢,就需要这样的思路:

  • 遍历数组array1,取出每一个元素

  • 遍历数组array2,判断从array1中取出的元素,是否在array2中出现过。

    • 有出现:代表元素已经统计过次数,不需要再次统计,跳过当前循环

    • 没有出现:没有统计过,开始统计

  • 用从array1中取出的元素和数组(array1)中的每一个元素作比较,如果有一样,记录次数,一轮比较完成后输出元素和重复的次数

  • 每统计过一个元素,需要记录下


    public static void main(String[] args) {
    //-- 1.声明数组,长度为20
    String[] array = new String[20];

    //-- arra2中放已经比较过的元素
    String[] array2 = new String[20];

    //-- index作为array2中存储元素的索引
    int index = 0;

    //-- 2.给数组赋值,元素是A-Z。随机生成
    for (int i = 0; i < array.length; i++) {
    //-- [0,25] -> 26位数
    array[i] = (char)((int)(Math.random()*26) + 65) + "";
    }
    System.out.println(Arrays.toString(array));


    //-- 3.遍历整个数组array 取数组中的每个元素
    for (String str : array) {

    boolean flag = false;
    //-- 先判断元素是否已经比较过了
    for (int i = 0; i < array2.length; i++) {
    if (str.equals(array2[i])) {
    flag = true;
    break;
    }
    }

    if (flag) {
    //-- 跳过当前循环,进入下一轮循环
    continue;
    }

    //-- str就是数组中的每个元素
    //-- 需要用这个str和数组中的元素做比较
    //-- count 代表每个元素的重复次数,外层循环每递进一次,就表示更换一个元素,count的值要重置
    int count = 0;
    for (int i = 0; i < array.length; i++) {
    //-- String类型判断是否相等要用equals()
    if (str.equals(array[i])) {
    count++;
    }
    }

    //-- 记录统计过的元素
    array2[index++] = str;
    //-- 输出元素和元素重复的次数!
    System.out.println(str + ":" + count);
    }
    }
    }

    对此我们还有另外一种思路:

  • 假设数组A存满元素,根据元素的取值范围定义数组B

  • 构建元素到数组B下标的映射关系

  • 利用数组B中下标所对应的空间来存储数组A中元素出现的次数

  • 有使用限制:!!!!!!!!!!!必须知道元素的取值范围!!!!!!!!!!!!!

public static void main(String[] args) {
//-- 提供一个数组
int[] array = new int[10];
//-- 给数组赋值元素,随机赋值: 1-5
for (int i = 0; i < array.length; i++) {
array[i] = (int)(Math.random() * 5) + 1;
}
System.out.println(Arrays.toString(array));


//-- 因为上面数组的取值是1-5.如果-1的话就可以变成0-4.那0-4是一个长度为的数组的索引
//-- 索引会有一个空间与之对应,利用这个空间来存储 索引代表的元素 出现的次数
int[] target = new int[5];
/*
* target的下标: -> 对应到array中的元素
* 0 1
* 1 2
* 2 3
* 3 4
* 4 5
*
* 在array中遇到3这个元素,就需要把3-1,得到2,2就是target的下标
* 然后在target[2]里面放3这个元素出现的次数!
*/

for (int i = 0; i < array.length; i++) {
//-- 从array中取出元素
int element = array[i];
//-- 把这个元素变成target的索引
int index = element - 1;
//-- 在target[index]空间内记录element出现的次数
//-- 出现的次数:第一次出现 记录为1 第二出现.取出已有的次数 + 1
//-- temp就是已经出现的次数
int temp = target[index];
//-- 对次数做加1操作
temp = temp + 1;
//-- 把新的次数再放回index所对应的空间内
target[index] = temp;
}



//-- 打印target
for (int i = 0; i < target.length; i++) {
int element = i + 1;
int count = target[i];
System.out.println(element + ":" + count);
}
}
}
举报

相关推荐

0 条评论