不定长滑动数组错误解析 ,1493题

1.原错误代码:

#define max(a,b) ((a>b)?(a):(b))
int longestSubarray(int* nums, int numsSize) {
    int ans=0,left=0,count=0;
    for(int right=0;right<numsSize;right++){
        if(nums[right]==0) count++;
        while(count>1){
            left++;
            if(nums[right]==0) count--;
        }
        ans = max(ans,right-left+1);
    }
    return ans-1;
}

2.现正确代码:

#define MAX(a, b) ((b) > (a) ? (b) : (a))

int longestSubarray(int* nums, int numsSize) {
    int ans=0,cnt=0,left=0;
    for(int right=0;right<numsSize;right++){
        cnt += 1 - nums[right]; //巧妙的解决了窗口中0的个数问题,避免写复杂的if-else判断逻辑
        while(cnt > 1){
            cnt -= 1 - nums[left];
            left++; 
        }
        ans = MAX(ans,right-left);
    }
    return ans;
}

3.总结:

 错误原因:没有注意到边界情况,写错了左右边界

posted @ 2026-01-12 13:55  jerry-autumn  阅读(2)  评论(0)    收藏  举报