怎么做有趣的微视频网站/杭州网站运营十年乐云seo
文章目录
- 1351. 统计有序矩阵中的负数
- 1572. 矩阵对角线元素的和
- 1672. 最富有客户的资产总量
- 766. 托普利茨矩阵
- 1380. 矩阵中的幸运数
- 1582. 二进制矩阵中的特殊位置
- 463. 岛屿的周长
1351. 统计有序矩阵中的负数
因为数据非递增的原因,所以每一行找第一个负数后面的数就一定全是负数
class Solution {
public:int countNegatives(vector<vector<int>>& grid) {int ans=0;for(int i=0;i<grid.size();i++) {int l=0,r=grid[i].size()-1;while(l<r) {int mid=l+r>>1;if(grid[i][mid]<0) r=mid;else l=mid+1;}if(grid[i][l]<0) ans+=grid[i].size()-l;}return ans;}
};
1572. 矩阵对角线元素的和
遍历一下所有行,然后加上每一行的对角线位置的两个数字即可。特判一下如果这个数字在正中间(两条对角线的交界处)减去一个即可
class Solution {
public:int diagonalSum(vector<vector<int>>& mat) {int sum=0;for(int i=0;i<mat.size();i++) {sum+=mat[i][i]+mat[i][mat[0].size()-i-1];if(mat[0].size()-i-1==i) sum-=mat[i][i];}return sum;}
};
1672. 最富有客户的资产总量
每一行求和更新最大值
class Solution {
public:int maximumWealth(vector<vector<int>>& accounts) {int res=0;for(auto t : accounts) {int cnt=0;for(int j=0;j<t.size();j++) {cnt+=t[j];}res=max(res,cnt);}return res;}
};
766. 托普利茨矩阵
根据托普利茨矩阵 的定义,我们只需要判断每一个元素是否都等于上一行的上一个元素即可。
class Solution {
public:bool isToeplitzMatrix(vector<vector<int>>& matrix) {for(int i=1;i<matrix.size();i++) {for(int j=1;j<matrix[0].size();j++) {if(matrix[i][j]!=matrix[i-1][j-1]) return false;}}return true;}
};
1380. 矩阵中的幸运数
按行按列寻找模拟题意即可
class Solution {
public:vector<int> luckyNumbers (vector<vector<int>>& matrix) {vector<int>ans;for(int i=0;i<matrix.size();i++) {int flag=0,st=0x3f3f3f3f,ed=0;for(int j=0;j<matrix[i].size();j++) {if(matrix[i][j]<st) {st=matrix[i][j],flag=j;}}for(int j=0;j<matrix.size();j++) {if(matrix[j][flag]>ed) {ed=matrix[j][flag];}}if(ed==st) ans.push_back(ed);}return ans;}
};
1582. 二进制矩阵中的特殊位置
模拟
class Solution {
public:int numSpecial(vector<vector<int>>& mat) {int res=0;for(auto t:mat) {int sum=0;int flag;for(int j=0;j<t.size();j++) {sum+=t[j];if(t[j]==1) flag=j;}if(sum==1) {int cnt=0;for(int j=0;j<mat.size();j++) {cnt+=mat[j][flag];}if(cnt==1) res++;}}return res;}
};
463. 岛屿的周长
dfs,当发现周围是水或者是边界的时候答案加一
typedef pair<int,int>PII;int dx[]={0,-1,0,1};
int dy[]={1,0,-1,0};class Solution {
public:int islandPerimeter(vector<vector<int>>& grid) {PII st;int ans=0;queue<PII>qu;for(int i=0;i<grid.size();i++) {for(int j=0;j<grid[0].size();j++) {if(grid[i][j]==1) {st={i,j};grid[i][j]=-1;goto m;}}}m:;qu.push(st);while(qu.size()) {auto t=qu.front();qu.pop();int cnt=0;for(int i=0;i<4;i++) {int x=dx[i]+t.first;int y=dy[i]+t.second;if(x>=0&&x<grid.size()&&y>=0&&y<grid[0].size()&&grid[x][y]==1) {grid[x][y]=-1;qu.push({x,y});}else if((x>=0&&x<grid.size()&&y>=0&&y<grid[0].size()&&grid[x][y]==0)||x<0||x>=grid.size()||y<0||y>=grid[0].size()) cnt++;}ans+=cnt;}return ans;}
};