Web培训
400-996-5531
今天小编要跟大家分享的文章是关于2020年前端面试题汇总之算法和应用。正在从事Web前端工作和想要换工作的小伙伴们来和小编一起看一看吧,希望本篇文章能够对大家有所帮助。
算法和应用
3.1 随机洗牌算法
题目:随机打乱数组里的元素,元素不能在原来的位置
let arr1 = [1,2,3,4,5,6,7,8,9,10]
function shuffle(array) {
for (let i = array.length - 1; i >= 0; i--) {
let randomIndex = Math.floor(Math.random() * (i + 1)); [array[i],
array[randomIndex]] = [array[randomIndex], array[i]] }
return array;}
shuffle(arr1)
Fisher–Yates shuffle洗牌算法:从后往前遍历,取当前的数和前面的一个随机下标的数交换位置。
3.2 两个鸡蛋与100层楼
题目:两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。在有限层数和蛋数的情况下,求即使最坏情况下需要的最少判断次数。
这是一道动态规划的题目,首先假设f[n][m]表示从m层楼扔n个鸡蛋,找到的安全位置的最少判断次数。如果第一个鸡蛋第一次从[1, i]中任选第j层扔下,如果碎了,就必须从[1, j - 1]挨着试, 也就是dp[1][j - 1];如果不碎的话,那么还要在[j, i]层继续扔,即dp[2][i - j]。最坏情况下则取max(dp[1][j - 1], dp[2][i - j])次。
根据方程写出解法:
function egg(floor) {
// dp[1][i] = i, dp[2][i] = i 最差的情况预处理数据
let dp = Array.from(new Array(3),
() => Array.from({length: floor + 1}, (v,k) => k))
for (let i = 1; i <= floor; i++ ) {
for (let j = 1; j < i; j++ ) {
dp[2][i] = Math.min ( dp[2][i], 1 + Math.max(dp[1][j-1], dp[2][i-j]) );
} }
return dp[2][floor]}
如果给的是n个鸡蛋,用下面的解法:
function floorEgg(egg, floor) {
if (egg < 1 || floor < 1)
return 0 // 初始化数组,值为最坏的次数
let dp = Array.from(new Array(egg + 1).keys(),x => Array.from({length: floor + 1}, (v,k) => x && k))
// 构建dp数组 for(let i = 2; i <= egg; i++){
for(let j = 1; j <= floor; j++){
for(let k = 1; k < j; k++){
dp[i][j] = Math.min(dp[i][j], 1 + Math.max(dp[i-1][k-1], dp[i][j-k]));
}
} }
return dp[egg][floor]}
以上就是小编今天为大家分享的关于2020年前端面试题汇总之算法和应用的文章,希望本篇文章能够对想要换工作的Web前端工程师们有所帮助,想要了解更多Web前端知识记得关注达内Web培训官网,最后祝愿小伙伴们工作顺利,成为一名优秀的Web前端工程师。
文章来源:原创 const弓长张 总在落幕后
【免责声明:本文图片及文字信息均由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除。】
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved