3

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

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

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

先感谢您。

4

4 回答 4

11

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

于 2013-03-17T15:53:52.857 回答
1

这应该这样做:

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)
于 2013-03-17T15:52:19.857 回答
1

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

于 2013-03-17T15:52:48.837 回答
1
int newRightShiftIndex = (curIndex + numOfPositions)%size;
int newLeftShiftIndex = (curIndex +(size-(numOfPositions%size)))%size;
  • curIndex - 是您当前的索引
  • numOfPositions - 要向后或顺时针移动的位置数
  • size - 长度,数组的大小
于 2021-01-24T19:14:38.753 回答