一、今日知识点总结:
二、今日做题记录:
1. 统计有序矩阵中的负数
int countNegatives ( int * * grid, int gridSize, int * gridColSize) {
int i, j, ans = 0 ;
int r = gridSize;
int c = gridColSize[ 0 ] ;
for ( i = 0 ; i < r; ++ i) {
for ( 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 i;
int ans = 0 ;
for ( i = 0 ; i < r; ++ i) {
ans += mat[ i] [ i] ;
}
for ( i = 0 ; i < r; ++ i) {
if ( r- i- 1 != i) {
ans += mat[ i] [ r- i- 1 ] ;
}
}
return ans;
}
3. 最富有客户的资产总量
int maximumWealth ( int * * accounts, int accountsSize, int * accountsColSize) {
int i, j;
int maxv = - 1 , maxIdx, sumv;
for ( i = 0 ; i < accountsSize; ++ i) {
sumv = 0 ;
for ( j = 0 ; j < * accountsColSize; ++ j) {
sumv += accounts[ i] [ j] ;
}
if ( sumv > maxv) {
maxv = sumv;
maxIdx = i;
}
}
return maxv;
}
4. 托普利茨矩阵
int checkSame ( 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 ] ;
int i;
for ( i = 0 ; i < c; ++ i) {
if ( ! checkSame ( matrix, 0 , i, r, c) ) {
return false;
}
}
for ( i = 0 ; i < r; ++ i) {
if ( ! checkSame ( matrix, i, 0 , r, c) ) {
return false;
}
}
return true;
}
5. 矩阵中的幸运数
int min ( int a, int b) {
return a < b ? a : b;
}
int max ( int a, int b) {
return a > b ? a : b;
}
int * luckyNumbers ( int * * matrix, int matrixSize, int * matrixColSize, int * returnSize) {
int i, j;
int r = matrixSize;
int c = matrixColSize[ 0 ] ;
int rmin[ 100 ] ;
int cmax[ 100 ] ;
int * ret = ( int * ) malloc ( sizeof ( int ) * r * c ) ;
for ( i = 0 ; i < r; ++ i) {
rmin[ i] = 1000000 ;
for ( j = 0 ; j < c; ++ j) {
rmin[ i] = min ( rmin[ i] , matrix[ i] [ j] ) ;
}
}
for ( j = 0 ; j < c; ++ j) {
cmax[ j] = 0 ;
for ( i = 0 ; i < r; ++ i) {
cmax[ j] = max ( cmax[ j] , matrix[ i] [ j] ) ;
}
}
* returnSize = 0 ;
for ( i = 0 ; i < r; ++ i) {
for ( j = 0 ; j < c; ++ j) {
if ( matrix[ i] [ j] == rmin[ i] && matrix[ i] [ j] == cmax[ j] ) {
ret[ ( * returnSize) ++ ] = matrix[ i] [ j] ;
}
}
}
return ret;
}