米哈游笔试 米哈游笔试题 0328

笔试时间:2025年03月28日

历史笔试传送门:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

题目:数字凸包区间

米小游有 n 个整数 {a_1,a_2,...,a_n} ,他定义区间 [l,r] 的“数字凸包区间”为 [min{a_l,...,a_r},max{a_l,..,a_r}] 。 现在,对于每一个 i=1,2,....,n ,直接输出不属于 [1,i] 这个区间的“数字凸包区间”的最小非负整数。

输入描述

第一行输入两个整数 n (1 <= n <= 10^5 ) 代表整数数量、询问次数。

第二行输入 n 个整数 a_1,a_2,...,a_n ( 0 <= a_i <=10^9) 代表元素。

输出描述

在一行上输出 n 个整数,代表对于每一个 i 的答案。

样例输入

5

1 0 4 5 1

样例输出

0 2 5 6 6

说明:

对于第一次询问,“数字凸包区间”为 [1,1] ,不属于这个“数字凸包区间”的最小非负整数为 0 。 对于第二次询问,“数字凸包区间”为 [0,1] ,不属于这个“数字凸包区间”的最小非负整数为 2 。

参考题解

需要为每个前i个元素构成的区间找到不属于其“数字凸包区间”的最小非负整数。这里的“数字凸包区间”定义为区间内元素的最小值和最大值构成的闭区间。若当前区间的最小值 min > 0,则最小的缺失非负整数一定是 0(因为0不在闭区间内)。若当前区间的最小值 min = 0,则最小的缺失非负整数是 max + 1(因为闭区间覆盖了0到max的所有整数)。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> a(n), result(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }

    int min_val = a[0];
    int max_val = a[0];

    for (int i = 0; i < n; ++i) {
        if (i > 0) {
            min_val = min(min_val, a[i]);
            max_val = max(max_val, a[i]);
        }
        if (min_val > 0) {
            result[i] = 0;
        } else {
            result[i] = max_val + 1;
        }
    }

    for (int i = 0; i < n; ++i) {
        cout << result[i];
        if (i < n - 1) cout << " ";
    }
    cout << endl;

    return 0;
}

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[] a = new int[n];
        int[] result = new int[n];

        for (int i = 0; i < n; i++) {
            a[i] = scanner.nextInt();
        }

        int minVal = a[0];
        int maxVal = a[0];

        for (int i = 0; i < n; i++) {
            if (i > 0) {
                minVal = Math.min(minVal, a[i]);
                maxVal = Math.max(maxVal, a[i]);
            }
            if (minVal > 0) {
                result[i] = 0;
            } else {
                result[i] = maxVal + 1;
            }
        }

        for (int i = 0; i < n; i++) {
            System.out.print(result[i]);
            if (i < n - 1) System.out.print(" ");
        }
        System.out.println();

        scanner.close();
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

n = int(input())
a = [int(c) for c in input().split()]

min_val = a[0]
max_val = a[0]
result = []

for i in range(n):
    if i > 0:
        min_val = min(min_val, a[i])
        max_val = max(max_val, a[i])
    if min_val > 0:
        result.append(0)
    else:
        result.append(max_val + 1)

print(' '.join(map(str, result)))

第二题

题目:最大面积

给定一个长度为 n 的二进制字符串 s,由 0 和 1 字符组成。我们需要构建一个行数为 n,列数为 n 的方表,由 0 和 1 字符组成。第一行为原始字符串 s,第二行为字符串 s 向右循环移动一个,第三行为字符串 s 向右循环移动两个,以此类推。求表中所有由 0 组成的三角形或矩形的最大面积值。第一行是字符串 s。 第二行是字符串 s 向右循环移动一个位置。 第 i 行是字符串 s 向右循环移动 i-1 个位置。

输入描述

输入一个长度为 n 的二进制字符串 s,仅包含 0 和 1 字符,其中 1 < n < 5000。

输出描述

输出表中所有由 0 组成的三角形或矩形的最大面积值。

样例输入

00110

样例输出

6

说明:

在构造的方表中,最大由 0 组成的矩形面积为 6,构造的表格如下: 00110 00011 10001 11000 01100

参考题解

此题目看似类似LEETCODE的85题***********

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

07-15 11:43
门头沟学院 Java
点赞 评论 收藏
分享
07-09 14:33
已编辑
门头沟学院 机械设计/制造
我记得很清楚,是面试基恩士的销售工程师。当时基恩士销售工程师的工资传的是二十二到三十多万,且它不限制学校,本科都能报,所以我还是很心动的,专门斥巨资600块在某宝上买了身西装。基恩士面试环节是有同时面两个应试人员(面试后才知道),同时对方也是两个面试官,有一个是日本的高管(听说)。面试官发来链接,上面显示我的面试时间段是多少,我按能进入的最早的时间点进去了,只有我一个人,非常紧张的等待,大概五六分钟,又进来一个年轻帅哥,我以为严阵以待,对方没开麦,我也没开麦,我稍显局促😅,对方也不是很放得开。我犹豫要不要问“面试官”要不要提前开始,但想着还是等“面试官”开口吧,可是已经到可以开始面试的时间了,对方似乎也很紧张,一直左右扭头。我坐不住了,开麦问:可以开始面试了吗“面试官”也坐不住了:可以可以尬住几秒,我在等他让我走自我介绍之类的流程,但是他似乎也在等我开口。“要自我介绍吗”我有点顶不住开口了。对方表情有点奇异,紧张中带点慌张:好。“额我是……的大四学生”“额我来自……”两个人一前一后开口了,脑门里面轰的一声两个人全愣住,“你也是来面试的啊”两个人绷不住了,表情很微妙😅“诶哥们你刚刚说你哪个学校来着”“……哇靠那你学校很好啊怎么还报这个”两个人闲聊起来。后续很遗憾的是我们两个面试完我没过,他也没过😄。
面试尴尬现场
点赞 评论 收藏
分享
评论
2
9
分享

创作者周榜

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