我正在尝试解决编程问题阵列向右旋转。 因此,给定长度数组和整数值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,但他也没有提及有关该模运算的任何内容。
谢谢
答案 0 :(得分:2)
with k> numsSize表示numsSize-k为负数时,您以负数调用反向函数作为索引,尝试在超出范围的地址处访问数组*程序崩溃*