矩阵中增长子串的长度

Length of a growing substring in matrix

给定一个方阵,求出正在增长的子字符串的长度。

matrix     |      result       because of
5          |
1 2 3 4 5  |
2 5 2 5 9  |    
7 8 9 0 1 -->       5     -->   1 2 3 4 5
0 0 0 0 0  |
2 3 6 1 2  |

我尝试将 a[i][j]a[i][j+1] 进行比较并递增计数器,但我认为我的问题是程序在最后一个元素上并且它不会递增计数器。 这是我的代码:

int main(){
    int n;
    scanf("%d",&n);
    int i,j,a[n][n];
    for(i = 0;i < n;i++){
        for(j = 0;j <n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    int max=-9999;
    int counter;
    for(i = 0;i < n;i++){
        counter=0;
        for(j = 0;j <n;j++){
            if(a[i][j]<a[i][j+1]){
                counter++;
            }
            if(counter>max){
                max = counter;
            }
        }
    }
    printf("%d",max);
    return 0;
}

对于初学者来说,由于索引的范围不能为负,因此将变量 max 声明为负值是没有意义的

int max=-9999;

至少可以这样初始化

int max = 0;

在这个 if 语句中

if(a[i][j]<a[i][j+1]){

由于表达式 a[i][j+1].[=19=,当 ij 等于 n - 1 时,可以访问超出分配数组的内存]

还有这个if语句

        if(counter>max){
            max = counter;
        }

应该移到内部 if 语句之外。

并且变量 count 应该在外循环中声明

您可以按以下方式重写内部 for 循环

    int counter=1;
    for(j = 1;j <n;j++){
        if(a[i][j-1]<a[i][j]){
            counter++;
        }
    }
    if(counter>max){
        max = counter;
    }