当前位置:   article > 正文

LeetCode- 1329. 将矩阵按对角线排序_1329将矩阵按对角线排序c++

1329将矩阵按对角线排序c++

给你一个 m * n 的整数矩阵 mat ,请你将同一条对角线上的元素(从左上到右下)按升序排序后,返回排好序的矩阵。

 

示例 1:

输入:mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
输出:[[1,1,1,1],[1,2,2,2],[1,2,3,3]]
 

提示:

m == mat.length
n == mat[i].length
1 <= m, n <= 100
1 <= mat[i][j] <= 100

 

 

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. class Solution {
  5. public:
  6. vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {
  7. vector<int> temp;
  8. for(int i=0;i<mat.size();i++){
  9. GetHVec(i,0,temp,mat);
  10. }
  11. for(int j=0;j<mat[0].size();j++){
  12. GetWVec(0,j,temp,mat);
  13. }
  14. for(int i=0;i<vec_height.size();i++){
  15. QuickSort(vec_height[i],0,vec_height[i].size()-1);
  16. }
  17. for(int i=0;i<vec_width.size();i++){
  18. QuickSort(vec_width[i],0,vec_width[i].size()-1);
  19. }
  20. for(int i=0;i<mat.size();i++){
  21. restore(i,0,vec_height[i],mat);
  22. }
  23. for(int j=0;j<mat[0].size();j++){
  24. restore(0,j,vec_width[j],mat);
  25. }
  26. return mat;
  27. }
  28. private:
  29. vector<vector<int>> vec_height;
  30. vector<vector<int>> vec_width;
  31. void QuickSort(vector<int>& a, int left, int right){
  32. int i = left;
  33. int j = right;
  34. int key = a[i];
  35. if(left<right){
  36. while(i<j){
  37. while(i<j && a[j]>=key){
  38. j--;
  39. }
  40. a[i] = a[j];
  41. while(i<j && a[i]<=key){
  42. i++;
  43. }
  44. a[j] = a[i];
  45. }
  46. a[i] = key;
  47. QuickSort(a,left,j-1);
  48. QuickSort(a,i+1,right);
  49. }else{
  50. return;
  51. }
  52. }
  53. void GetHVec(int i, int j, vector<int> &temp, vector<vector<int>>& mat){
  54. if(i >= mat.size() || j>= mat[i].size()){
  55. vec_height.push_back(temp);
  56. temp.clear();
  57. return;
  58. }
  59. temp.push_back(mat[i][j]);
  60. GetHVec(i+1,j+1,temp,mat);
  61. }
  62. void GetWVec(int i, int j, vector<int> &temp, vector<vector<int>>& mat){
  63. if(i >= mat.size()|| j>= mat[i].size()){
  64. vec_width.push_back(temp);
  65. temp.clear();
  66. return;
  67. }
  68. temp.push_back(mat[i][j]);
  69. GetWVec(i+1,j+1,temp,mat);
  70. }
  71. void restore(int x, int y, vector<int> &val,vector<vector<int>>& mat){
  72. for(int i=0;i<val.size();i++){
  73. mat[x++][y++] = val[i];
  74. }
  75. }
  76. };
  77. int main(){
  78. vector<vector<int>> mat={{3,3,1,1},
  79. {2,2,1,2},
  80. {1,1,1,2}};
  81. Solution *ps = new Solution();
  82. vector<vector<int>>res = ps->diagonalSort(mat);
  83. for(int i=0;i<res.size();i++){
  84. for(int j=0;j<res[i].size();j++){
  85. cout<<res[i][j]<<",";
  86. }
  87. cout<<endl;
  88. }
  89. return 0;
  90. }

 

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

闽ICP备14008679号