【问题标题】:String array - instances of unique values字符串数组 - 唯一值的实例
【发布时间】:2013-10-09 10:25:13
【问题描述】:

我编写了一个程序,它遍历一个字符串数组并打印唯一的单词及其出现,然后将它们打印到一个文件中。这部分工作得很好,但我无法弄清楚如何获得唯一单词的总数。我觉得我需要为计数器创建一个 int 数组,但我并不完全掌握如何做到这一点。不幸的是,我不允许使用 Hashmap、Sets 或 Lists;必须坚持使用数组。

boolean [] done = new boolean[textfile.length];
for(int i = 0; i<textfile.length; i++){
    if(done[i])
        continue;
    int nb = 0;
    for(int j = i; j < textfile.length; j++){
        if(done[j])
            continue;
        if(textfile[i].equals(textfile[j])){
            done[j] = true;
            nb++;

        }
    }

    pw.println(textfile[i] + "occurs " + nb + " times");
}

【问题讨论】:

  • 你可以使用set吗?
  • 变量nb是什么??
  • 统计每个唯一词的实例

标签: java arrays counter


【解决方案1】:

我会建议你这样做-

-将数组中的所有值相加并对该数组进行排序。(这样就很容易获得唯一的条目)

-将排序后的数组的所有元素(一一)与要比较的单词进行比较。

-现在,在将文本文件中的单词与数组中存在的单词进行比较时,维护一个全局变量 i.e. counter,该变量将在每次出现唯一字符时递增,并将保留该值以供将来使用。

【讨论】:

    【解决方案2】:

    现在您正在将文件中的每个单词与它之后的所有单词进行比较,这需要 O(N^2) 次,您可以创建一个包含所有单词的数组,按字典顺序对其进行排序,这需要 O(NlogN) 时间,然后遍历数组并计算每个唯一单词的出现次数(如果 2 个相邻单词相等,则继续计数,否则打印并重置计数器),这需要 O(N) 次。

    【讨论】:

    • 谢谢,这正是我需要的信息。我会看看我能不能让它工作。
    【解决方案3】:

    您可以在 first for 之外设置 uniqe_counter 并在每次打印前 nb == 1 时递增该值

    【讨论】:

      【解决方案4】:

      您在外循环的每次迭代中都重新初始化变量nb。因此,您最终会丢失上次迭代中处理的唯一单词的计数。

      你必须将 int nb = 0; 放在第一个 for 循环之外。

      【讨论】:

        【解决方案5】:

        最简单的方法是:

        1. 对数组进行排序
        2. 遍历排序数组并记住最后一个唯一条目
        3. 如果 lastUniqueEntry 与下一个条目不同。唯一计数 + 1
        4. 做其他所有事情,比如打印唯一的单词及其出现

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-07-15
          • 2013-06-03
          • 1970-01-01
          • 2014-07-28
          • 1970-01-01
          • 2017-06-06
          • 1970-01-01
          相关资源
          最近更新 更多