gpt4 book ai didi

java - 具有频率的列表中连续重复整数的计数

转载 作者:行者123 更新时间:2023-12-04 21:15:46 24 4
gpt4 key购买 nike

我想从字节列表中计算连续重复数字的数量,并将它们显示为两个整数数组:

  • 第一个数组包含非重复整数值。
  • 第二个数组包含随后的重复计数。

  • 因此,对于这样的输入:
    Byte[] bytes = new Byte[] {2, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 2};

    我期待这样的输出:
    integers  -[2, 0, 2, 0, 2]
    frequency -[3, 4, 2, 2, 1]

    这基本上是输入的压缩 View 。输出表示整数 2 重复 3 次,然后是 0,重复 4 次,然后是 2,重复 2 次,依此类推。

    我写了下面的代码。
     List<Byte> integers = new ArrayList<>();
    List<Integer> frequencies = new ArrayList<>();

    for (int i=0; i < bytes.size() - 1; i++) {
    Byte current = bytes.get(i);
    Byte next = bytes.get(i+1);
    if (current == next) {
    count ++;
    // if all bytes are of the same type
    if (count == bytes.size() || i == bytes.size() - 2) {
    integers.add(current);
    frequencies.add(count);
    }
    continue;
    integers.add(current);
    frequencies.add(count);
    count = 1;
    }
    }
    System.out.println("integers " + integers + " - frequency " + frequencies);

    此代码适用于大多数情况。但我错过了一些边缘情况。就像示例输入一样,缺少到达最后一个元素 2 的输出。我的输入代码的输出是 -
    integers  -[2, 0, 2, 0]
    frequency -[3, 4, 2, 2]

    我正在添加一堆 if涵盖所有极端情况的声明,但我想知道是否有更清洁的解决方案?

    最佳答案

    我没有尝试在 IDE 上运行此代码,但我认为这应该足够了:

    int count = 1;
    int index = 0;

    byte current = bytes[index];
    while (index < bytes.length - 1) {
    index++;
    if (bytes[index] == current) {
    count++;
    } else {
    integers.add(current);
    frequencies.add(count);
    count = 1;
    current = bytes[index];
    }
    }

    integers.add(current);
    frequencies.add(count);

    关于java - 具有频率的列表中连续重复整数的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55928400/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com