ARTS打卡第一周

2021-01-23  本文已影响0人  MR_Model

ARTS打卡第一周

Algorithm:每周至少做一个 leetcode 的算法题

542. 01 矩阵

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。

两个相邻元素间的距离为 1 。


来源:力扣(LeetCode)
链接:https://https://leetcode-cn.com/problems/01-matrix/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

当前位置距离0的最近距离为上、下、左、右相邻点的距离+1

从左上遍历时,根据上面的观点更新数组,右下遍历时,比较最小值,更换数组值

代码:

    vector<vector<int>> updateMatrix(vector<vector<int>>& matrix)
     {
    int width = matrix.size();
    int height = matrix[0].size();

    // 赋值vtDst数组,INT_MAX / 2是由于遍历时,可能出现初始值+1的情况,防止超出长度
    vector<vector<int>> vtDst(width, vector<int>(height, INT_MAX / 2));
    for (int i = 0; i < width; i++)
    {
        for (int j = 0; j < height; j++)
        {
            if (matrix[i][j] == 0)
            {
                vtDst[i][j] = 0;
            }
        }
    }

    // 从左上遍历
    for (int i = 0; i < width; i++)
    {
        for (int j = 0; j < height; j++)
        {
            if (i - 1 >= 0)
            {
                vtDst[i][j] = min(vtDst[i][j], vtDst[i - 1][j] +1);
            }

            if (j - 1 >= 0)
            {
                vtDst[i][j] = min(vtDst[i][j], vtDst[i][j-1] + 1);
            }
        }
    }

    // 从右下遍历
    for (int i = width - 1; i >= 0; i--)
    {
        for (int j = height - 1; j >= 0; j--)
        {
            if (i + 1 < width)
            {
                vtDst[i][j] = min(vtDst[i][j], vtDst[i + 1][j] + 1);
            }

            if (j + 1 < height)
            {
                vtDst[i][j] = min(vtDst[i][j], vtDst[i][j + 1] + 1);
            }
        }
    }

    return vtDst;
}

Review:阅读并点评至少一篇英文技术文章

commenting-out-a-block-of-code-with-vim

使用vim一时爽,一直使用一直爽

Tip:学习至少一个技术技巧

windows下分析使用vs2017内置的内存工具分析内存泄漏,本质上还是通过快照进行人工的确认泄漏处。

类似windows平台下的工具 glags.exe\ pageheap.exe

Share:分享一篇有观点和思考的技术文章

C++20特性

C++20新特性已经推出,而之前的一些公司开发工具在vs2015,且众多C11的新特性不进行引入,等到20的特性被引入不知道又是何年何月。
上一篇下一篇

猜你喜欢

热点阅读