4.10字节笔试-后端开发 实习 Java

4道题,2个小时。

1. 第一题

有一个矩阵,矩阵中每个数字代表一块海洋/土地块(数字1代表土地,数字0代表海洋),每1土地仅与上下左右四块其他的土地块/海洋接壤。矩阵边缘以外均视为土地。
涨潮时,与海洋接壤两格或以上的土地块将被淹没为海洋。请返回涨潮后的矩阵。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        while (t-- > 0) {
            int m = sc.nextInt();
            int n = sc.nextInt();
            String[] a = new String[m]; // 输入的矩形
            StringBuilder[] res = new StringBuilder[m]; // 涨潮后的矩阵
            for (int i = 0; i < m; ++i) {
                a[i] = sc.next();
                res[i] = new StringBuilder(a[i]);

            }
            for (int i = 0; i < m; ++i) {
                for (int j = 0; j < n; ++j) {
                    if (a[i].charAt(j) == '0') {
                        continue;
                    }
                    int cnt = 0;
                    if (i > 0 && a[i - 1].charAt(j) == '0') { // 上
                        ++cnt;
                    }
                    if (i < m - 1 && a[i + 1].charAt(j) == '0') { // 下
                        ++cnt;
                    }
                    if (j > 0 && a[i].charAt(j - 1) == '0') { // 左
                        ++cnt;
                    }
                    if (j < n - 1 && a[i].charAt(j + 1) == '0') { // 右
                        ++cnt;
                    }
                    if (cnt >= 2) {
                        res[i].setCharAt(j, '0');
                    }
                }
            }
            for (int i = 0; i < m; ++i) {
                System.out.println(res[i].toString());
            }
        }
    }
}

第二题

题目描述
一个机器人,它每移动一步至少需要消耗一个能量值。例如当小明给它输入5个能量值的时候,它可能会走0步(也就是不动),也可能走1步,但是不会走超过5步。
希望机器人往前走N步,每个位置有不同的能量值,每次消耗了能量值之后可以往前走几步,到达新的位置之后,可以继续消耗当前位置的能量值,继续往前。如果当前位置的能量值为0,那么机器人就无法行动了。
问机器人是否有机会移动到最后一个指令。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        boolean flag = true;
        int score;
        int mx = 0;
        for (int i = 0; i < n; ++i) {
            score = sc.nextInt();
            if (i <= mx) {
                mx = Math.max(mx, i + score);
            } else {
                flag = false;
            }
        }
        System.out.println(flag ? "TRUE" : "FALSE");
    }
}

第三题

字节网球部门有一套特殊的装箱姿势:首先取出N个网球桶和K个网球,给每个网球依次印上编号(1,2,3,...k)。接着按照编号从小到大的顺序依次取出每个网球,对于每个网球,随机找一个网球桶,从任意一个开口塞进去。
波波现在要对一批产品进行质量检测,请帮他判断这箱网球是否严格遵循了上述装箱流程。
字节网球部门有一套特殊的装箱姿势:首先取出N个网球桶和K个网球,给每个网球依次印上编号(1,2,3...k)。接着按照编号从小到大的顺序依次取出每个网球,对于每个网球,随机找一个网球桶,从任意一个开口塞进去。
波波现在要对一批产品进行质量检测,请帮他判断这箱网球是否严格遵循了上述装箱流程。

#include <iostream>
#include <deque>
#include <queue>
#include <vector>

using namespace std;

int main() {
    std::ios::sync_with_stdio(false);
    int T; cin >> T;
    deque<int> dq[11];
    while (T--) {
        int n; cin >> n; bool ans = true;
        for(int i = 0; i < n; ++i) dq[i].clear();
        int all_k = 0;
        for (int i = 0; i < n; ++i) {
            int k; cin >> k; all_k += k;
            for (int j = 0; j < k; ++j) {
                int x; cin >> x; dq[i].push_back(x);
            }
        }
        for (int i = all_k; i >= 1; --i) {
            bool flag = false;
            for (int j = 0; j < n; ++j) {
                if (dq[j].size() > 0) {
                    if (dq[j].front() == i) {
                        dq[j].pop_front(); flag = true;
                    } else if (dq[j].back() == i) {
                        dq[j].pop_back(); flag = true;
                    }
                }
            }
            if (!flag) {
                ans = false; break;
            }
        }
        puts(ans ? "1" : "0");
    }
}

第四题

-题目描述
某商品在促销时推出了集换活动,集齐全套卡片即可获得神秘大奖,集换活动的规则如下:
1.每次购买都可以获得三张集换卡
2.一套集换卡中包含10种不同的卡片(用0-9标识)
假设你知道每件商品中包含的集换卡,请判断输出集齐整套卡片最少需要购买几件商品?

没有AC,不贴代码了
#字节笔试##实习##Java##字节跳动#
全部评论
强啊,能问一下笔试的题和代码是自己记得吗🤣,我一直想问笔试可以自己录屏吗,不然没回还得用草纸来记录一下笔试题,好麻烦
1 回复 分享
发布于 2022-04-11 00:16
第四题dp dp[j]代表集齐前 j个卡片所需要的最少包数,转移公式为 dp[j]=min(dp[j-1],dp[j-2],dp[j-3])+1 后两者当且仅当存在包同时包含 (j-2)j-1 j(3)2张卡片时成立
点赞 回复 分享
发布于 2022-05-30 20:58

相关推荐

点赞 评论 收藏
分享
评论
8
23
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务