首页 > 解决方案 > INT_MIN 的用途

问题描述

我在hackerrank中解决了一个二维数组的问题,这是一个沙漏程序,我们必须找到每个沙漏的总和,然后打印最大沙漏总和。代码如下

  int hourglassSum(vector<vector<int>> arr) {
        int result= 0;
        for(int r=0;r<=3;r++)
        {
            for(int c=0;c<=3;c++)
            {
                int sum=arr[r][c]+arr[r][c+1]+arr[r][c+2]+arr[r+1][c+1]+arr[r+2][c]+arr[r+2][c+1]+arr[r+2][c+2];
                if(sum>result)
                {   
                    result=sum;               
                }
            }
        }
        return result;
    }
    int main()

{

    vector<vector<int>> arr(6);
    for (int i = 0; i < 6; i++) {
        arr[i].resize(6);

        for (int j = 0; j < 6; j++) {
            cin >> arr[i][j];
        }
    }

    int result = hourglassSum(arr);
    return 0;
}

现在当我取结果 = 0 时,它在某些测试用例中不起作用。但是一旦我替换结果 = INT_MIN,程序就可以正常工作。由于 INT_MIN 只是分配数据类型可以容纳的最小值,那么为什么我的程序在 result=0 时不起作用?

标签: c++

解决方案


int result= 0;

如果全部sum 为负,则最终结果将错误地为 0。 if(sum>result) result=sum;从不为真,因此0使用默认值 - 这不是最大值sum

int result = INT_MIN;

超过当前最小值的任何sum值,即使都是负数,result也会通过 更新if(sum>result) result=sum;


推荐阅读