米哈游前端笔试4.15(第二批)
范围合适,围绕前端,数据结构,操作系统的关键知识点
选择
哈夫曼编码
关键路径
进程线程
栈顶指针
...考太久了忘记了还有啥
编程
只可以采用Javascript(Node)
- 建议本地编程,因为有时候平台代码提示功能不好,比如拼写错误检查费时。
- 记得准备好空模板,不要在考试时一打开就是上次的代码,含有代码的IDE有可能被记为作弊。
- 本地ide不要有代码,否则可能被记
- 编程模式提前了解下:有的平台不支持本地ide,真正手写代码,有的甚至没有提示。。。
- 连同一平台的模式也可能不同,千万不能掉以轻心,(如百度牛客网,我以为和之前的SHINE在牛客网上的笔试一样是核心代码模式。)
- 笔试平台都会提供输入输出示例,但是考试时现场学浪费时间。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!ACM模式和普通的核心代码模式完全不一样!!!!!!!!!!!!!!
所以大家一定,一定提前练习牛客的输入输出和赛码网的输入输出!!!一定提前练习!!!!
牛客的输入输出练习看这,没空的可以直接看模板笔试常考设计模式,操作系统,数据结构,ACM模板,经典算法
赛码网的大家直接去赛码网,不过其实和牛客的差不多,只不过是函数的区别,比如readline()和read_line()这样的区别~
求和最小
一个数(偶数位),从哪里劈开,两侧的和最小
情况A:从中间分开,得到的和最小,因为两边此时位数最接近
情况B:从中间前/后一位分开,位数必然比A多,
虽然A可能会向前进位和B位数一样多,但是A依旧比B小
综上选用A做就可以了
冰火消除
I 和F相互抵消(I ice,F fire)冰花骗骗花互相发生反应,其存在的原来位置变成'.'
先标记,再清除即可,不能边遍历边处理,会影响后面的,注意消除是上下左右都可以,连带消除
输入:
3 4
FIF.
.FIF
.FFI
输出:
....
....
.F..
emmm思路应该没错,不知道为什么不通过,如有佬耐心看的话,还请指教,如想看正确的在下面题解链接里
function judge(n,m,i,j,arr=[]){
let exp=/IF/;
let exp1=/FI/;
if(i>0){//上
if(exp.test(arr[i-1][j]+arr[i][j])||exp1.test(arr[i-1][j]+arr[i][j])){
return true;
}
}
if(i<n-1){//下
if(exp.test(arr[i+1][j]+arr[i][j])||exp1.test(arr[i+1][j]+arr[i][j])){
return true;
}
}
if(j>0){//左
if(exp.test(arr[i][j]+arr[i][j-1])||exp1.test(arr[i][j]+arr[i][j-1])){
return true;
}
}
if(j<m-1){//右
if(exp.test(arr[i][j]+arr[i][j+1])||exp1.test(arr[i][j]+arr[i][j+1])){
return true;
}
}
return false;
}
function fun(arr=[]){//arr:[n+1,m]
let n=arr[0][0],m=arr[0][1];//n行,m列
let res=[];
for(let i=1;i<=n;i++){
// console.log(arr[i][0].split(''))
res.push(arr[i][0].split(''));
}
for(let i=0;i<n;i++){
for(let j=0;j<m;j++){
if(judge(n,m,i,j,res)){
res[i][j]='D';
}
}
}
for(let i=0;i<n;i++){
for(let j=0;j<m;j++){
if(res[i][j]==='D'){
// res[i].replace('D','.')
res[i][j]='.';
}
}
console.log(res[i]);
}
}
let arr=[];
arr.push(['3','4'])
arr.push(['FIF.'])
arr.push(['...I'])
arr.push(['.F.I'])
fun(arr)
组合
以下题解来自4.15米哈游前端笔试-算法题部分-通俗易懂题解
假定有一个数组ai i>=0,i<n;bi=ai + ai-1 我们知道全部的bi,请问ai有多少种可能的组合 n 1e5,bi 1e9
先写出前几项,找规律,若我们假定第一项是x,那么所有的ai都可以用b和x表示,因此我们需要让所有的ai大于0都成立,转化为了一系列关于x的方程组,均大于0;
那么多写几项有没有规律呢,有的,除了x的剩下部分,也就是前面的全b的部分挺相似的。即所有的奇数项,偶数项成等差数列;注意起始项不同,且奇数是-x,偶数是+ x
可能输出负数,要跟0求一下max
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
typedef long long ll;
#define rep(i, start, end) for (int i = start; i <= end; i++)
#define lop(i, start, end) for (int i = start; i >= end; i--)
int main() {
ios_base::sync_with_stdio(0);
// freopen("t.in", "r", stdin);
// 数学?
int n;
cin >> n;
vector<ll> b(n), t(n);
rep(i, 0, n - 2) {
cin >> b[i];
}
t[1] = b[0], t[2] = b[1] - b[0];
ll up = LONG_LONG_MAX, down = LONG_LONG_MIN;
for (int i = 3; i <= n; i += 2) {
t[i] = b[i - 1] - b[i - 2] + t[i - 2];
}
for (int i = 4; i <= n; i += 2) {
t[i] = b[i - 1] - b[i - 2] + t[i - 2];
}
for (int i = 1; i < n; i += 2) {
up = min(up, t[i]);
}
for (int i = 2; i < n; i += 2) {
down = max(down, -t[i]);
}
if (down < 0) {
down = 0;
}
cout << up - down - 1;
return 0;
}
#软件开发2023笔面经##米哈游##前端##笔试##实习#
查看11道真题和解析