【问题标题】:Scroll backward circular array向后滚动圆形数组
【发布时间】:2013-03-17 15:49:04
【问题描述】:

我有一个数组,我想向后滚动其中的位置。

我有一个布尔数组,我需要计算给定单元格向前和向后有多少个真值。

我知道如果 N 是数组中元素的数量,我可以继续做 i=(i+1)%N。 但是如果我需要以相反的方式滚动呢?

提前谢谢你。

【问题讨论】:

  • 减 1 而不是加 1...
  • 如果 i=0,(i-1)%N 结果 -1

标签: java circular-buffer


【解决方案1】:

我通常使用i = (i - 1 + N) % N 来防止负值。

【讨论】:

    【解决方案2】:

    应该这样做:

    i--;
    if (i == -1)
      i = N-1;
    

    或在 1 行中:

    i = ((i-1 == -1) ? N-1 : i-1);
    

    但上述噪声的变化可能更好。 相关的 if 语句版本:

    if (i == 0)
      i = N-1;
    else
      i--;
    

    相关的 1 行版本:

    i = (i == 0 ? N-1 : i-1)
    

    【讨论】:

      【解决方案3】:

      i = (i == 0 ? N : i) - 1怎么样?

      【讨论】:

        【解决方案4】:
        int newRightShiftIndex = (curIndex + numOfPositions)%size;
        int newLeftShiftIndex = (curIndex +(size-(numOfPositions%size)))%size;
        
        • curIndex - 是您当前的索引
        • numOfPositions - 你想向后或顺时针移动的位置数
        • size - 数组的长度、大小

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-06
          • 1970-01-01
          相关资源
          最近更新 更多