有人可以解释为什么在这里计算此模吗?

时间:2019-02-04 22:25:10

标签: c algorithm

我正在尝试解决编程问题阵列向右旋转。 因此,给定长度数组和整数值K,我应该将其向右旋转K次。 我试图了解算法,并提出了以下解决方案:

void reverse(int *nums, int start, int end)
{
    while(start<end)
    {
        int temp = nums[start];
        nums[start] = nums[end];
        nums[end] = temp;
        start++;
        end--;
    }
}
void rotate(int* nums, int numsSize, int k) {
    k = k % numsSize;
    if(numsSize > 1)
    {
    reverse(nums, 0, (numsSize - k - 1));
    reverse(nums, numsSize - k, numsSize - 1);
    reverse(nums, 0, numsSize - 1);    
    }
    else
        *nums = *nums;

}

在上述解决方案中,我将阵列反转了3次,以使其旋转。第一次反转是0,长度-K,第二次反转是长度-k,长度是整个数组的三分之一。

但是我的问题是,如果我不添加这一行 k = k%numsSize,出现k> numsSize的错误。 为什么呢?

我关注了这个YouTube链接here,但他也没有提及有关该模运算的任何内容。

谢谢

1 个答案:

答案 0 :(得分:2)

with k> numsSize表示numsSize-k为负数时,您以负数调用反向函数作为索引,尝试在超出范围的地址处访问数组*程序崩溃*