You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

判断第二个数组是否为第一个右移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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:51:01