文末
我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。
首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。
更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
前端面试题汇总
JavaScript
性能
linux
前端资料汇总
输入整数数组 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一些特性。
并祝愿大家在新的一年找工作面试中胆大心细,发挥出最好的水平,找到一份理想的工作。