2024年4月13日美团春招实习试题【第一题:好子矩阵】-题目+题解+在线评测【模拟】

发布于:2024-04-22 ⋅ 阅读:(171) ⋅ 点赞:(0)

2024年4月13日美团春招实习试题【第一题:好子矩阵】-题目+题解+在线评测【模拟】

题目描述:

塔子哥定义一个矩阵是”好矩阵”,当且仅当该矩阵所有元素都相同。 现在塔子哥拿到了一个矩阵,她想知道该矩阵有多少2*2的子知阵是好矩阵?

输入描述

第一行输入两个正整数m和n,代表输入矩阵的行数和列数。

接下来的n行,每行输入m个正整数a(i,j),代表塔子哥拿到的矩阵。

1<=n,m<=100

1 < = a ( i , j ) < = 1 0 9 1<=a_{(i,j)}<=10^9 1<=a(i,j)<=109

输出描述

2*2好子矩阵的数量

样例

输入

3 3
1 2 1
1 1 1
1 1 3

输出

1

说明

只有左下角一个好子矩阵。

OJ链接:
https://codefun2000.com/p/P1819

解题思路一:模拟

m, n = map(int, input().split())
matrix = [[0] * n for _ in range(m)]
for i in range(m):
    row = list(map(int, input().split()))
    matrix[i] = row
def goodMatrix(matrix, x, y):
    t = matrix[x][y]
    if t == matrix[x+1][y] and t == matrix[x+1][y+1] and t == matrix[x][y+1]:
        return True
    return False

cnt = 0
for i in range(m-1):
    for j in range(n-1):
        if goodMatrix(matrix, i, j):
            cnt += 1
print(cnt)

时间复杂度:O(nm)
空间复杂度:O(1)

解题思路二:思路二

import collections

n, m = map(int, input().split())
mat = list()
for _ in range(n):
    mat.append(list(map(int, input().split())))

bad_start = collections.defaultdict(list)
ret = 0

for i in range(n-1):
    for j in range(m-1):
        if j not in bad_start[i] and mat[i][j+1] == mat[i][j]:
            if mat[i+1][j+1] != mat[i][j+1]:
                bad_start[i].append(j+1)
            else:
                if mat[i+1][j] != mat[i+1][j+1]:
                    bad_start[i+1].append(j)
                else:
                    ret += 1

print(ret)

时间复杂度:O(nm)
空间复杂度:O(1)

解题思路三:直接判断

n, m = map(int, input().split())
g = [list(map(int, input().split())) for _ in range(n)]
ans = 0
for i in range(n - 1):
    for j in range(m - 1):
        if g[i][j] == g[i + 1][j] and g[i + 1][j] == g[i][j + 1] and g[i][j + 1] == g[i + 1][j + 1]:
            ans += 1
print(ans)

# python
n,m = map(int,input().split())
matrix=[]
for _ in range(n):
    row=list(map(int, input().split()))
    matrix.append(row)
count=0
for i in range(n-1):
    for j in range(m-1):
        if matrix[i][j] == matrix[i+1][j]==matrix[i][j+1]==matrix[i+1][j+1]:
            count+=1
print(count)

# java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[][] g = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                g[i][j] = scanner.nextInt();
            }
        }
        int ans = 0;
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < m - 1; j++) {
                if (g[i][j] == g[i + 1][j] && g[i + 1][j] == g[i][j + 1] && g[i][j + 1] == g[i + 1][j + 1]) {
                    ans++;
                }
            }
        }
        System.out.println(ans);
        scanner.close();
    }
}

# c++
#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    vector<vector<int>> g(n, vector<int>(m));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> g[i][j];
        }
    }
    int ans = 0;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < m - 1; j++) {
            if (g[i][j] == g[i + 1][j] && g[i + 1][j] == g[i][j + 1] && g[i][j + 1] == g[i + 1][j + 1]) {
                ans++;
            }
        }
    }
    cout << ans << endl;
    return 0;
}

时间复杂度:O(nm)
空间复杂度:O(1)


网站公告

今日签到

点亮在社区的每一天
去签到