一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して14日目です。クリックしてイベントの詳細をご覧ください。
1.問題の説明
m x n
行列 が与えられ、 要素が0の場合、その行と列のすべての要素を 0に設定します 。インプレースアルゴリズムを使用してください 。
トピックリンク:マトリックスゼロ化
第二に、主題の要件
例1
输入: matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出: [[1,0,1],[0,0,0],[1,0,1]]
复制代码
例2
输入: matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出: [[0,0,0,0],[0,4,5,0],[0,3,1,0]]
复制代码
訪問
1.数组
2.建议用时15~25min
复制代码
3.問題分析
これは、配列思考の論理を調べる質問です。最初に特定の配列に対して、ループ判定が最初に実行されます。
位置に0が含まれている場合、この位置を記録するには、どのレコードが使用されますか?
2つのアレイを別々に構築できます
vector<int>row(m),col(n);//行、列数组
复制代码
この行と列全体のデータである0の位置を格納します。
最後に、現在の要素が配置されている行と列をトラバースしますrow[i]或者col[j]
。1に等しいことがわかった場合は、要素を0に設定します。
第四に、エンコーディングの実装
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int i,j,p=0,m=matrix.size(),n=matrix[0].size();//初始化数据
vector<int>row(m),col(n);//行、列数组
for(i=0;i<m;i++)//遍历求解位置
{
for(j=0;j<n;j++)
{
if(matrix[i][j]==0)
{
row[i]=col[j]=1;//暂存行、列
}
}
}
for(i=0;i<m;i++)//之前记录位置的行、列置为0
{
for(j=0;j<n;j++)
{
if(row[i]||col[j])
{
matrix[i][j]=0;
}
}
}
}
};
复制代码