2024年前端最新10道前端算法题,2024年最新面试必过秘诀

算法刷题

大厂面试还是很注重算法题的,尤其是字节跳动,算法是问的比较多的,关于算法,推荐《LeetCode》和《算法的乐趣》,这两本我也有电子版,字节跳动、阿里、美团等大厂面试题(含答案+解析)、学习笔记、Xmind思维导图均可以分享给大家学习。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

写在最后

最后,对所以做Java的朋友提几点建议,也是我的个人心得:

  1. 疯狂编程

  2. 学习效果可视化

  3. 写博客

  4. 阅读优秀代码

  5. 心态调整

用js写算法题
在这里插入图片描述

var arr = [];
function toLocaleString(num) {
    if (num === null) return;
    //转成字符串
    var nums = num.toString();
    //处理字符串
    process(nums);
}
function process(nums) {
    if (nums.length <= 3) {
        arr[arr.length] = nums;
    } else {
        //切割最后三个字符
        arr[arr.length] = nums.slice(-3);
        //留下前面
        nums = nums.slice(0, nums.length - 3);
        //递归
        process(nums);
    }
}
toLocaleString(123456789);
//反转 并 转成字符串
console.log(arr.reverse().join(','));

在这里插入图片描述

function getMaxLength(str) {
    //最终长度
    var result = 0;
    //存储目前最大字串
    var noRepeatStr = '';
    for (var i = 0; i < str.length; i++) {
        var c = str.charAt(i);
        var index = noRepeatStr.indexOf(c);
        if (index == -1) { //还没出现过的字符
            noRepeatStr = noRepeatStr + c;
            result = result < noRepeatStr.length ? noRepeatStr.length : result;
        } else {
            //肯定是第一个重复 取剩下的 + c
            noRepeatStr = noRepeatStr.substr(1) + c;
        }
    }
    return result;
}
console.log(getMaxLength("abcdefg"));

在这里插入图片描述

function sum(a, b) {
    var min = Math.min(a.length, b.length);
    var max = Math.max(a.length, b.length);
    var length = max - min;
    //字符串前面补0
    for (var i = 0; i < length; i++) {
        if (a.length > b.length) {
            b = '0' + b;
        } else {
            a = '0' + a;
        }
    }
    //转成数组并反转 (注意还是字符数组)
    a = a.split('').reverse();
    b = b.split('').reverse();
    //初始化结果数组
    var res = new Array(max);
    for (var i = 0; i < max; i++) {
        res[i] = 0;
    }
    //a、b相加
    for (var i = 0; i < max; i++) {
        var temp = parseInt(a[i]) + parseInt(b[i]) + parseInt(res[i]);
        if (temp > 9) {
            res[i] = temp - 10;
            res[i + 1] = 1;
        } else {
            res[i] = temp;
        }
    }
    //反转数组并转回字符串
    return res.reverse().join('');
}
console.log(sum('47393245', '678794')); //48072039

在这里插入图片描述

function combine(arr) {

    //对前两个子数组相乘
    var arr1 = arr[0];
    var arr2 = arr[1];
    var length1 = arr1.length;
    var length2 = arr2.length;
    var newArr = new Array(length1 \* length2);
    var index = 0;
    for (var i = 0; i < length1; i++) {
        for (var j = 0; j < length2; j++) {
            newArr[index] = arr[0][i] + "," + arr[1][j];
            index++;
        }
    }
    //更新
    var Arr = new Array(arr.length - 1);
    Arr[0] = newArr;
    for (var i = 2; i < arr.length; i++) {
        Arr[i - 1] = arr[i];
    }
    //递归中止条件
    if (Arr.length == 1) {
        return Arr[0];
    } else {
        return combine(Arr);
    }

}
var arr = [['A1', 'B1', 'C1'], ['A2', 'B2', 'C2'], ['a3', 'b3']];
var res = combine(arr);
console.log(res);

在这里插入图片描述

function decidePrice() {
    var n = 5;
    var m = 6;
    var want = [1, 2, 3, 4, 5, 6];
    //记录价格
    var price = 0;
    //记录收益
    var q = 0;
    //对want数组进行升序排序
    want = want.sort(function (a, b) {
        return a - b;
    });

    //当供不应求时,不考虑出价较低者
    if (n < m) {
        want = want.slice(m - n);
    }
    //遍历算出最大q
    for (var i = 0; i < want.length; i++) {
        if (q < want[i] \* (want.length - i)) {
            q = want[i] \* (want.length - i);
            price = want[i];
        }
    }
    return price;
}

console.log(decidePrice());

在这里插入图片描述

var s = "aaasdaddddddaf";
//存储最大长度


### 结尾

学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

![html5](https://img-blog.csdnimg.cn/img_convert/d35c2cf2d5364b4907e65f1856c923a4.png)



  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值