[打卡帖]《九日集训》诺亚方舟(第七天)

223文阳 2021-12-16 22:31:14

一、1351. 统计有序矩阵中的负数

class Solution {
public:
    int countNegatives(vector<vector<int>>& grid) {
        int rows = grid.size(), cols = grid[0].size();
        int ans=0;
        for(int i=rows-1; i>=0&&grid[i][cols-1]<0; i--){
            for(int j=cols-1; j>=0&&grid[i][j]<0; j--){
                ans++;
            }
        }
        return ans;
    }
};

二、1572. 矩阵对角线元素的和

class Solution {
    public int diagonalSum(int[][] mat) {
        int sum = 0,n = mat.length;
        for(int i= 0  ;i<n;i++)
        {
            sum += mat[i][i];
            sum += mat[i][n-i-1];
        }
        if(n%2 == 1)
        {
            sum -= mat[n/2][n/2];
        }
        return sum; 
    }
}

三、1672. 最富有客户的资产总量

class Solution {
public:
    int maximumWealth(vector<vector<int>>& accounts) {
        int max = 0;
        for(int i = 0; i < accounts.size(); ++i){
            int sum = 0;
            for(int j = 0; j < accounts[0].size(); ++j){
                sum += accounts[i][j];
            }
            if(max < sum){
                max = sum;
            }
        }
        return max;
    }
};

四、766. 托普利茨矩阵

class Solution {
    public boolean isToeplitzMatrix(int[][] matrix) {
        int rows = matrix.length;
        int cols = matrix[0].length;
        for(int i = 0; i < rows - 1; i++){
            for(int j = 0; j < cols - 1; j++){
                if(matrix[i][j] != matrix[i + 1][j + 1]){
                    return false;
                }
            }
        }
        return true;
    }
}

五、1380. 矩阵中的幸运数

class Solution {
    public List<Integer> luckyNumbers (int[][] matrix) {
        int[] minArr = new int[matrix.length];
        int[] maxArr = new int[matrix[0].length];
        for (int i = 0; i < matrix.length; i++) {
            minArr[i] = 0;
            int[] ints = matrix[i];
            int min = ints[0];
            for (int j = 1; j < ints.length; j++) {
                int vj = ints[j];
                if (min > vj) {
                    min = vj;
                    minArr[i] = j;
                }
            }
        }

        List<Integer> ans = new ArrayList<>();
        for (int i = 0; i < matrix[0].length; i++) {
            maxArr[i] = 0;
            int max = matrix[0][i];
            for (int j = 1; j < matrix.length; j++) {
                int v = matrix[j][i];
                if (max < v) {
                    max = v;
                    maxArr[i] = j;
                }
            }

            if (minArr[maxArr[i]] == i) {
                ans.add(matrix[maxArr[i]][i]);
            }
        }

        return ans;
    }
}

1582. 二进制矩阵中的特殊位置

class Solution {
    public int numSpecial(int[][] mat) {
        int rowLen=mat.length;
        int colLen=mat[0].length;
        Set<Integer> isOneSet=new HashSet<>();
        for(int row=0;row<rowLen;row++){
            for(int col=0;col<colLen;col++){
                if(mat[row][col]==1)isOneSet.add(row*colLen+col);
            }
        }
        int ret=0;
        for(int n:isOneSet){
            int cnt=0;
            for(int num=n/colLen*colLen;num<n/colLen*colLen+colLen;num++){
                if(isOneSet.contains(num))cnt++;
            }
            for(int num=n%colLen;num<rowLen*colLen;num+=colLen){
                if(isOneSet.contains(num))cnt++;
            }
            if(cnt==2)ret++;
        }
        return ret;
    }
}

七、463. 岛屿的周长

class Solution {
public:
    int islandPerimeter(vector<vector<int>>& grid) {
        int sum = 0;    
        int cover = 0;  
        for (int i = 0; i < grid.size(); i++) {
            for (int j = 0; j < grid[0].size(); j++) {
                if (grid[i][j] == 1) {
                    sum++;
                    
                    if(i - 1 >= 0 && grid[i - 1][j] == 1) cover++;
                    
                    if(j - 1 >= 0 && grid[i][j - 1] == 1) cover++;
                    
                }
            }
        }
        return sum * 4 - cover * 2;
    }
};

https://leetcode-cn.com/problems/island-perimeter/

给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。

网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。

岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。

 

示例 1:

输入:grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
输出:16
解释:它的周长是上面图片中的 16 个黄色的边
示例 2:

输入:grid = [[1]]
输出:4
示例 3:

输入:grid = [[1,0]]
输出:4
 

提示:

row == grid.length
col == grid[i].length
1 <= row, col <= 100
grid[i][j] 为 0 或 1
通过次数83,203提交次数117,933

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/island-perimeter
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

...全文
99 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,138

社区成员

发帖
与我相关
我的任务
社区描述
学习「 算法 」的捷径就是 「 题海战略 」,社区由「 夜深人静写算法 」作者创建,三年ACM经验,校集训队队长,亚洲区域赛金牌,世界总决赛选手。社区提供系统的训练,答疑解惑,面试经验,大厂内推等机会
社区管理员
  • 英雄哪里出来
  • 芝麻粒儿
  • Amy卜bo皮
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

QQ群:480072171

英雄算法交流 8 群

 

试试用AI创作助手写篇文章吧