【问题标题】:Using Boolean to Identify/Segregate elements of array (java)使用布尔值来识别/分离数组的元素(java)
【发布时间】:2017-03-30 08:53:56
【问题描述】:

我是通过 codefights.org 和其他资源学习编码和学习的新手。我偶然发现了这个问题:

======

求给定排列的循环数。

示例

对于排列 = [1, 3, 2, 6, 4, 5],输出应该是 permutationCycles(permutation) = 3.*

  int permutationCycles(int[] permutation) {

  boolean[] inCycle = new boolean[permutation.length];
  int result = 0;

  for (int i = 0; i < permutation.length; i++) {
    if (!inCycle[i]) {
      int position = i;
      while (!inCycle[position]) {
        inCycle[position] = true;
        position =  //...// ;
      }
      result++;
    }
  }

  return result;
}

任务是将 //...// 替换为正确的代码。我可以用自己的方式编写代码,但不使用布尔数组。我不明白的是布尔数组 inCycle 是如何连接到排列数组的。有人也可以向我解释一下这里的 if 循环是什么意思吗?提前致谢。

【问题讨论】:

    标签: java arrays algorithm boolean


    【解决方案1】:

    如果我理解了这个问题,应该是

    position = permutation[position]  - 1;
    

    这会将您带到当前周期的下一个元素。我使用了permutation[position] - 1 而不是permutation[position],因为您的示例中的索引从 1 开始,而 Java 数组是从 0 开始的。

    布尔数组用于标记哪些元素已经被访问过(因此属于你已经计算过的某个循环)。

    对于排列[1, 3, 2, 6, 4, 5],执行如下:

    i == 0
        position = 0
        position = permutation [0] - 1 = 0 -> this closes the first cycle
    i == 1
        position = 1
        position = permutation [1] - 1 = 2
        position = permutation [2] - 1 = 1 -> this closes the 2nd cycle
    i == 2 already in cycle
    i == 3
        position = 3
        position = permutation [3] - 1 = 5
        position = permutation [5] - 1 = 4
        position = permutation [4] - 1 = 3 -> this closes the 3rd cycle
    i == 4 already in cycle
    i == 5 already in cycle
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-07
      • 2021-03-09
      • 2016-08-22
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 2014-06-30
      • 2020-09-19
      相关资源
      最近更新 更多