讨论/技术交流/为什么同一段代码在IDE里面就可以运行,在力扣官网上就不行/
为什么同一段代码在IDE里面就可以运行,在力扣官网上就不行

在vs2019里面可以运行的代码在力扣上却报错:内存溢出,这是为啥?
题目是今天的题:1004. 最大连续1的个数 III

int longestOnes(int* A, int ASize, int K) {
    if (ASize < K) {
        return ASize;
    }
    int left = 0, right = 0, res = 0;
    int temp = 0;
    A[left] ? 0 : temp++;
    while (left < ASize && right < ASize) {
        if (temp <= K) {
            res = res > right - left + 1 ? res : right - left + 1;
            right++;
            A[right] ? 0 : temp++;
        }
        else {
            A[left] ? 0 : temp--;
            left++;
        }
    }
    return res;
}

不止这一道题有过这种情况,以前也有过!!!!

1
共 1 个回复

因为访问到非法的下标了:

int longestOnes(int* A, int ASize, int K) {
    if (ASize < K) {
        return ASize;
    }
    int left = 0, right = 0, res = 0;
    int temp = 0;
    A[left] ? 0 : temp++;
    while (left < ASize && right < ASize) {
        if (temp <= K) {
            res = res > right - left + 1 ? res : right - left + 1;
            right++; // right = ASize - 1
            A[right] ? 0 : temp++; // 访问非法地址
        }
        else {
            A[left] ? 0 : temp--;
            left++;
        }
    }
    return res;
}

改成

int longestOnes(int* A, int ASize, int K) {
    if (ASize < K) {
        return ASize;
    }
    int left = 0, right = 0, res = 0;
    int temp = 0;
    while (right < ASize) {
        A[right] ? 0: temp++;
        if (temp <= K) {
            res = res > right - left + 1 ? res : right - left + 1;
        }
        else {
            A[left] ? 0 : temp--;
            left++;
        }
        ++right;
    }
    return res;
}
1