《九日集训》第十五轮 (第八讲) 二级指针
知识点
二级指针
int **myMalloc(int r, int c, int* returnSize, int** returnColumnSizes) { int i; int **ret = (int **)malloc( sizeof(int *) * r ); // (1) *returnColumnSizes = (int *)malloc( sizeof(int) * r ); // (2) *returnSize = r; // (3) for(i = 0; i < r; ++i) { ret[i] = (int *)malloc( sizeof(int) * c ); // (4) (*returnColumnSizes)[i] = c; // (5) } return ret; }
题目分析
题目1
分析
模拟+枚举一下
代码
class Solution { void swap(int&a,int&b){ int temp=0; temp=a; a=b; b=temp; } void reverse(vector<int>&nums){ for(int i=0,j=nums.size()-1;i<j;i++,j--){ swap(nums[i],nums[j]); } } public: vector<vector<int>> flipAndInvertImage(vector<vector<int>>& image) { for(auto i=0;i<image.size();i++){ reverse(image[i]); for(auto j=0;j<image[i].size();j++){ image[i][j]=!image[i][j]; } } return image; } };
题目2
分析
开一个新数组,然后把行列索引互换一下赋值
代码
class Solution { public: vector<vector<int>> transpose(vector<vector<int>>& matrix) { int m=matrix[0].size();//列 int n=matrix.size();//行 vector<vector<int>>res(m,vector<int>(n)); for(int i=0;i<m;i++){ for(int j=0;j<n;j++) res[i][j]=matrix[j][i]; } return res; } };
题目3
分析
遍历,当原列数大于新列数的时候,让新列数的索引为0
代码
class Solution { public: vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) { int m=mat.size(); int n=mat[0].size(); if(m*n!=r*c) return mat; vector<vector<int>> ans(r,vector<int>(c)); for(int i=0,j=0,l=0;i<m;i++){ for(int k=0;k<n;k++,l++){ if(l>=c){ l=0; j++; } ans[j][l]=mat[i][k]; } } return ans; } };
题目4
分析
原理同上题
代码
class Solution { public: vector<vector<int>> construct2DArray(vector<int>& original, int m, int n) { if(m*n!=original.size())return{}; vector<vector<int>> res(m,vector<int>(n)); for(int i=0,j=0,k=0;i<original.size()&&j<m;i++,k++){ if(k>=n){ k=0; j++; } res[j][k]=original[i]; } return res; } };
题目5
分析
把二维数组变成一维数组向右移动k位,然后在变回二维数组
代码
class Solution { public: vector<vector<int>> shiftGrid(vector<vector<int>>& grid, int k) { int m=grid.size(),n=grid[0].size(); vector<int>temp; for(int i=0;i<m;i++) for(int j=0;j<n;j++) temp.push_back(grid[i][j]); vector<int>temp2(temp.size()); for(int i=0;i<temp.size();i++){ temp2[(i+k)%temp.size()]=temp[i]; } for(int i=0,j=0,k=0;i<temp.size()&&j<m;i++,k++){ if(k>=n){ k=0; j++; } grid[j][k]=temp2[i]; } return grid; } };
题目6
分析
直接枚举格子周围的格子数和格子数之和就行了
答案
class Solution { public: vector<vector<int>> imageSmoother(vector<vector<int>>& img) { int m=img.size(),n=img[0].size(); vector<vector<int>>res(m,vector<int>(n)); for(int i=0;i<m;i++) for(int j=0;j<n;j++){ int sum=0,cnt=0; for(int x=i-1;x<=i+1;x++) for(int y=j-1;y<=j+1;y++) if(x>=0&&y>=0&&x<m&&y<n){ cnt++; sum+=img[x][y]; } res[i][j]=sum/cnt; } return res; } };
题目7
分析
二维前缀和,有模板,枚举的范围即可。
模板:
class Solution { public: vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) { int m=mat.size(),n=mat[0].size(); vector<vector<int>>sum(m+1,vector<int>(n+1)); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+mat[i-1][j-1]; int sum;//x1,y1,x2,y2所围成矩阵的区域和 int x1,y1,x2,y2; sum=sum[x2+1][y2+1]-sum[x1][y2+1]-sum[x2+1][y1]+sum[x1][y1]; return res; } };
代码
class Solution { public: vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) { int m=mat.size(),n=mat[0].size(); vector<vector<int>>sum(m+1,vector<int>(n+1)); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+mat[i-1][j-1]; vector<vector<int>>res(m,vector<int>(n)); int x1,y1,x2,y2; for(int i=0;i<m;i++) for(int j=0;j<n;j++){ x1=i-k<0?0:i-k; y1=j-k<0?0:j-k; x2=i+k>=m?m-1:i+k; y2=j+k>=n?n-1:j+k; res[i][j]=sum[x2+1][y2+1]-sum[x1][y2+1]-sum[x2+1][y1]+sum[x1][y1]; } return res; } };
题目8
分析
这题明显bfs,但是我不会,所以只能sort自定义排序氵一下了qwq
代码
class Solution { public: vector<vector<int>> allCellsDistOrder(int rows, int cols, int rCenter, int cCenter) { vector<vector<int>>res; for(int i=0;i<rows;i++) for(int j=0;j<cols;j++){ res.push_back({i,j}); } sort(res.begin(),res.end(),[&rCenter,&cCenter](vector<int>&a,vector<int>&b){ return (abs(a[0]-rCenter)+abs(a[1]-cCenter))<(abs(b[0]-rCenter)+abs(b[1]-cCenter)); }); return res; } };
总结
今天的题比较简单,除了那道要用BFS的题不会写(以后补票),所以只能用sort自定义排序氵过去了qwq
本文作者:灰之魔女伊蕾娜
本文链接:https://www.cnblogs.com/daohengdao/p/16100959.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步