判断第二个数组是否为第一个右移1位的C++代码错误排查
问题分析
你的代码存在3个核心错误,导致测试结果不符合预期:
- 判定逻辑完全错误:你当前的代码只要发现任意一个位置
i满足arr1[i] == arr2[i+1]就直接返回true,但题目要求所有移位对应位置的元素都相等才返回true。你给出的失败测试用例中,i=0时就满足匹配条件,代码直接返回true,完全没有校验后续位置的匹配性,自然输出错误。 - 存在数组越界风险:你的循环条件为
i<arr1.size(),当i取到arr1.size()-1时,i+1等于arr1.size(),如果两个数组长度相同,该下标已经超出arr2的合法下标范围,会触发未定义行为。 - 缺少前置校验逻辑:没有先判断两个数组长度是否一致,长度不同的数组不可能满足整体右移1位的要求,应当直接返回
false。
修正后的代码示例
bool simonSays(std::vector<int> arr1, std::vector<int> arr2) { // 前置校验:长度一致且非空 if (arr1.size() != arr2.size() || arr1.empty()) { return false; } // 遍历所有移位对应位置:arr1的0~n-2对应arr2的1~n-1 for(int i = 0; i < arr1.size() - 1; i++) { if (arr1[i] != arr2[i+1]) { return false; } } return true; }
内容的提问来源于stack exchange,提问作者B_M
相关产品推荐
相关产品推荐

