当前位置:   article > 正文

leetcode每日一题-3033. 修改矩阵

leetcode每日一题-3033. 修改矩阵

题目描述:

 解题思路:简单题目,思路非常直接。对列进行遍历,记录下最大值,然后再遍历一遍,把-1替换为最大值。需要注意的是进行列遍历和行遍历是不同的。

官方题解:

  1. class Solution {
  2. public:
  3. vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {
  4. int n = matrix.size();
  5. int m = matrix[0].size();
  6. for (int j = 0; j < m; j++) {
  7. int zd = -1;
  8. for (int i = 0; i < n; i++) {
  9. zd = max(zd, matrix[i][j]);
  10. }
  11. for (int i = 0; i < n; i++) {
  12. if (matrix[i][j] == -1) {
  13. matrix[i][j] = zd;
  14. }
  15. }
  16. }
  17. return matrix;
  18. }
  19. };

其实还可以进一步优化。官方题解对数据进行了两次遍历,有没有办法进行一次遍历呢?事实上可以把每一列的最大值和-1的元素坐标先保存下来,然后再把元素坐标替换为相应列的最大值即可。

这样只需要遍历一次数据就可以了。

  1. class Solution {
  2. public:
  3. // 存储坐标的结构体
  4. struct LOC{
  5. // 行坐标
  6. int row;
  7. // 列坐标
  8. int col;
  9. };
  10. public:
  11. vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {
  12. // 获取行数
  13. int row = matrix.size();
  14. // 获取列数
  15. int col = matrix[0].size();
  16. // 没列最大值
  17. int max_value;
  18. // 存储每列最大值
  19. vector<int> max_vector;
  20. // 存储-1元素的坐标
  21. vector<LOC> loc_vector;
  22. // 按照列优先进行遍历
  23. for(int i=0;i<col; ++i)
  24. {
  25. // 假设最大值为-2
  26. max_value = -2;
  27. for(int j=0;j<row;++j)
  28. {
  29. if(max_value< matrix[j][i])
  30. max_value=matrix[j][i];
  31. if(matrix[j][i]==-1)
  32. {
  33. LOC tmp_loc;
  34. tmp_loc.row = j;
  35. tmp_loc.col = i;
  36. loc_vector.push_back(tmp_loc);
  37. }
  38. }
  39. max_vector.push_back(max_value);
  40. }
  41. // 开始对-1的元素进行替换
  42. for(int i=0; i<loc_vector.size();++i)
  43. {
  44. matrix[loc_vector[i].row][loc_vector[i].col]=max_vector[loc_vector[i].col];
  45. }
  46. return matrix;
  47. }
  48. };

这是一条吃饭博客,由挨踢零声赞助。学C/C++就找挨踢零声,加入挨踢零声,面试不挨踢!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/795474
推荐阅读
相关标签
  

闽ICP备14008679号