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

数组排序旋转校验代码异常:输入{2,1,3,4}返回结果不符

旋转数组校验代码逻辑问题排查

给定代码用于校验输入数组是否由某一排序数组经过若干次旋转(包括0次)得到,但输入{2,1,3,4}时返回true,实际正确结果应为false,以下是逻辑问题排查:

原代码

class Solution {
    public int [] rotate(int [] arr, int k){
        int [] ans = new int[arr.length];
        for(int i=0;i<arr.length;i++){
            ans[i]=arr[(i+k)%arr.length];
        }
        return ans;
    }

    public boolean check(int[] nums){
        int count=0;
        boolean b=false;
        for(int i=0;i<nums.length-1;i++){
            if(nums[i]<nums[i+1]){
                  b=true;;
            }
        }
        

        int [] temp = new int[nums.length];
        for(int i=1;i<nums.length;i++){
               temp=rotate(temp,i);
               for(int k=0;k<nums.length-1;k++){
                   if(temp[k]<temp[k+1]){
                     b=true;
                   }
               }
        }
      if(b==true){
          return true;
      }
   return false;
    }
}

核心问题点

  • 初始判断逻辑完全错误:第一个循环只要发现任意一对相邻元素递增就将b设为true,这和校验目标完全无关。比如输入{2,1,3,4}中存在3<4,直接触发b=true,后续逻辑直接返回true,完全忽略了数组不符合旋转排序数组的事实。
  • rotate方法旋转逻辑错误:当前的索引计算ans[i]=arr[(i+k)%arr.length]无法正确生成旋转后的数组。比如要实现右移k次,正确的逻辑应该是将原数组的第i位放到新数组的(i+k)%arr.length位置,而非反过来。
  • 临时数组初始化无效:temp被初始化为全0数组,后续对全0数组旋转并比较,完全没有用到输入的nums数组,这部分逻辑完全是无效操作。
  • 整体校验思路错误:不需要生成所有可能的旋转数组再判断是否有序,旋转排序数组的核心特征是:数组中相邻元素递减的次数最多为1次(包括最后一个元素和第一个元素的比较)。如果递减次数超过1次,说明无法由排序数组旋转得到。

修正后的代码示例

class Solution {
    public boolean check(int[] nums) {
        int decreaseCount = 0;
        int n = nums.length;
        for (int i = 0; i < n; i++) {
            // 比较当前元素和下一个元素,最后一个元素和第一个元素比较
            if (nums[i] > nums[(i + 1) % n]) {
                decreaseCount++;
                // 递减次数超过1次,直接返回false
                if (decreaseCount > 1) {
                    return false;
                }
            }
        }
        return true;
    }
}

内容的提问来源于stack exchange,提问作者user_program

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:21:27