面试时间:50min
职位:前端开发暑期实习
0、先自我介绍
1、手撕之前笔试写过的算法,做一个优化简单优化(x)
之前写过的算法题一定要去回顾,一定要去了解的很透彻(题目记录在下方)
2、React中setState是异步的么?(√)
3、post和get的区别 (√)
4、react的diff (√ ×)
5、为什么会跨域,如何解决(√)
6、js的基本数据类型(×,多嘴说了个bigInt)
7、如何判断一个变量是否是number类型(√ )
8、判断是不是数组(√ ×)
9、让clss="b"水平垂直居中有哪些方式手写一下(√ )
10.你知道哪些ES6的内容
面试官体验挺好的,人也很有意思。我面完问他你有没有什么建议给我,因为第一次参加面试嘛
他说都挺好的,基础知识还行,就是算法还需加强。不过也别太担心有的公司就不要求,有的公司就会要求,像我我就会问(细品)。
总结:挺好,美团面试体验不错面试官也很棒,就是个人太菜凉了…算法王道呀
优化题目:
题目描述
给出一个序列包含n个正整数的序列A,你可以从中删除若干个数,使得剩下的数字中的最大值和最小 值之差不超过x,请问最少删除多少个数字。
输入
输入第一行仅包含两个正整数n和x,表示给出的序列的长度和给定的正整数。(1<=n<=1000,1<=x<=10000)
接下来一行有n个正整数,即这个序列,中间用空格隔开。(1<=a_i<=10000)
输出
输出仅包含一个整数,表示最少删除的数字的数量。
题目限制
时间限制:C/C++语言 1000MS;其他语言 3000 MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
样例输入
5 2
2 1 3 2 5
样例输出
1
/*优化解法*/
function newFn(x,arr){
let count =0;
/*开局就做一个排序,取得最大值和最小值*/
arr.sort((a,b)=>a-b);
while (1){
let max =arr[arr.length-1],
min = arr[0];
if (max-min<=x){
return count
}
/*这种情况下可以出现从后取值和从前取值两种情况,两种都有比较极端的情况
* 因此我们需要做一个差值来决定从哪一头来取值
* */
/*看和下一项那边差距大,我们优先删除掉差距大的那一项*/
let subtractMax = arr[length-1] - arr[length-2];
let subtractMin = arr[1] - arr[0];
subtractMax>=subtractMin?arr.pop():arr.shift();
count++
}
return count
}