剑指 Offer 40,前端开发面试题及答案

61 阅读3分钟

文末

我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。

首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。

更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。

前端面试题汇总

JavaScript

性能

linux

前端资料汇总

开源分享:docs.qq.com/doc/DSmRnRG…

输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。

示例 1:

输入:arr = [3,2,1], k = 2

输出:[1,2] 或者 [2,1]

示例 2:

输入:arr = [0,1,2,1], k = 1

输出:[0]

思路

--

快速排序分组

题目只要求返回最小的 k 个数,对这 k 个数的顺序并没有要求。因此,只需要将数组划分为 最小的 k 个数 和 其他数字 两部分即可,而快速排序的哨兵划分可完成此目标。

根据快速排序原理,如果某次哨兵划分后 基准数正好是第 k+1 小的数字 ,那么此时基准数左边的所有数字便是题目所求的 最小的 k 个数 。

根据此思路,考虑在每次哨兵划分后,判断基准数在数组中的索引是否等于 k ,若 true 则直接返回此时数组的前 kk个数字即可。

若 k < i ,代表第 k+1 小的数字在 左子数组 中,则递归左子数组;

若 k > i ,代表第 k+1 小的数字在 右子数组 中,则递归右子数组;

若 k = i,代表此时 arr[k] 即为第 k+1 小的数字,则直接返回数组前 k 个数字即可;

题解

--

//输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。

class Solution {

public int[] getLeastNumbers(int[] arr, int k) {

if(k>=arr.length){return arr;}

return quickSort(arr,0,arr.length-1,k);

}

public int[] quickSort(int[]arr, int left,int right,int k){

int l=left;

int r=right;

int temp=arr[left];

while(l<r){

while(l<r && arr[r]>=temp){

r--;

}

while(l<r && arr[l]<=temp){

l++;

}

swap(arr,l,r);

}

swap(arr,left,l);

if(k>l){return quickSort(arr,l+1,right,k);}

if(k<l){return quickSort(arr,left,l-1,k);}

return Arrays.copyOf(arr,k);

}

public void swap(int[] arr,int i,int j){;

int temp=arr[i];

最后

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】 就答题情况而言,第一问100%都可以回答正确,第二问大概只有50%正确率,第三问能回答正确的就不多了,第四问再正确就非常非常少了。其实此题并没有太多刁钻匪夷所思的用法,都是一些可能会遇到的场景,而大多数人但凡有1年到2年的工作经验都应该完全正确才对。 只能说有一些人太急躁太轻视了,希望大家通过此文了解js一些特性。

并祝愿大家在新的一年找工作面试中胆大心细,发挥出最好的水平,找到一份理想的工作。