【发布时间】:2021-08-30 02:06:30
【问题描述】:
问题是判断第二个数组是否是第一个右移1的数组。 例子: simonSays([1, 2, 3, 4, 5], [0, 1, 2, 3, 4]) ➞ 真 simonSays([1, 2, 3, 4, 5], [5, 5, 1, 2, 3]) ➞ false
我的代码如下:
bool simonSays(std::vector<int> arr1, std::vector<int> arr2) {
for(int i=0; i<arr1.size(); i++)
if(arr1[i]==arr2[i+1])
return true;
return false;
}
但是,我的代码在这个测试用例上失败了。我的输出是真的,但实际上应该是假的:
It(Test4){Assert::That(simonSays({1, 2, 3, 4, 5}, {0, 1, 2, 3, 3}), Equals(false));}
我的代码有什么问题?
【问题讨论】:
-
你在最后一个元素处越界了。你需要绕到前面。
-
@GaryHoliday 我觉得我不太明白,能否请您详细说明一下?
-
你能更准确地说“向右移动 1”是什么意思吗?您的测试用例似乎正在寻找将所有值调整为 1,但代码正在检查值是否已移动位置。
-
您的代码假定
arr2的元素比arr1多,因为它在循环的最后一次迭代中访问 arr2[arr1.size()+1]`。失败的测试用例有arr1.size() == arr2.size(),所以访问arr2[array2.size()]会给出未定义的行为。