第七天打卡。
1、统计有序矩阵中的负数
int countNegatives(int** grid, int gridSize, int* gridColSize){
int ans=0;
int r=gridSize;
int c=gridColSize[0];
for(int i=0;i<r;++i){
for(int j=0;j<c;++j){
if(grid[i][j]<0) ++ans;
}
}
return ans;
}
2、矩阵对角线元素的和
int diagonalSum(int** mat, int matSize, int* matColSize){
int r=matSize;
int c=matColSize[0];
int sum=0;
for(int i=0;i<r;++i){
sum+=mat[i][i];
}
for(int j=0;j<r;++j){
if(r-j-1!=j) sum+=mat[j][r-j-1];
}
return sum;
}
3、最富有客户的资产总量
int maximumWealth(int** accounts, int accountsSize, int* accountsColSize){
int ans=0,max=0;
int r=accountsSize;
int c=accountsColSize[0];
for(int i=0;i<r;++i){
ans=0;
for(int j=0;j<c;++j){
ans+=accounts[i][j];
if(ans>max){
max=ans;
}
}
}
return max;
}
4、托普利茨矩阵
int check(int **matrix,int sr,int sc,int maxr,int maxc){
int step=0;
while(1){
if(sr+step>=maxr) break;
if(sc+step>=maxc) break;
if(matrix[sr+step][sc+step]!=matrix[sr][sc]){
return false;
}
++step;
}
return true;
}
bool isToeplitzMatrix(int** matrix, int matrixSize, int* matrixColSize){
int r=matrixSize;
int c=matrixColSize[0];
for(int i=0;i<r;++i){
if(!check(matrix,i,0,r,c)){
return false;
}
}
for(int j=0;j<c;++j){
if(!check(matrix,0,j,r,c)){
return false;
}
}
return true;
}
5、矩阵中的幸运数
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* luckyNumbers (int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
int r=matrixSize;
int c=matrixColSize[0];
int minr[matrixSize];
int maxc[*matrixColSize];
int i,j;
int *ret=(int *)malloc(sizeof(int )*100);
for(i=0;i<r;++i){
minr[i]=INT_MAX;
for(j=0;j<c;++j){
if(minr[i]>=matrix[i][j]) minr[i]=matrix[i][j];
}
}
for(j=0;j<c;++j){
maxc[j]=INT_MIN;
for(i=0;i<r;++i){
if(maxc[j]<=matrix[i][j]) maxc[j]=matrix[i][j];
}
}
*returnSize=0;
for(i=0;i<r;++i){
for(j=0;j<c;++j){
if(matrix[i][j]==minr[i]&&matrix[i][j]==maxc[j]){
ret[*returnSize]=matrix[i][j];
++(*returnSize);
}
}
}
return ret;
}
6、二进制矩阵中的特殊位置
int numSpecial(int** mat, int matSize, int* matColSize){
int ans=0;
for(int i=0;i<matSize;++i){
int tmp=0;int flag=0;
for(int j=0;j<*matColSize;++j){
if(mat[i][j]==1){
flag++;
tmp=j;
}
}
if(flag==1){
flag=0;
for(int k=0;k<matSize;++k){
if(mat[k][tmp]==1){
flag++;
}
}
if(flag==1) ans++;
}
}
return ans;
}
7、岛屿的周长
int islandPerimeter(int** grid, int gridSize, int* gridColSize){
int len=0,land=0;;
int r=gridSize;
int c=gridColSize[0];
for(int i=0;i<r;++i){
for(int j=0;j<c;++j){
if(grid[i][j]==1){
land++;
if(j<c-1&&grid[i][j+1]==1) len+=2;
if(i<r-1&&grid[i+1][j]==1) len+=2;
}
}
}
return 4*land-len;
}