瓶子君前端算法集训营第一期开营啦,免费哟

三道算法题:

第一题:图解 leetcode 刷题:合并两个有序数组

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 num1 成为一个有序数组。

说明:

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n )来保存 nums2 中的元素。

示例:

输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3

输出: [1,2,2,3,5,6]

答案:https://github.com/sisterAn/JavaScript-Algorithms/issues/3

第二题:腾讯算法题:数组扁平化、去重、排序

已知如下数组:var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];

编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组

答案:https://github.com/sisterAn/JavaScript-Algorithms/issues/5

第三题:字节&leetcode:两数之和

给定一个整数数组 nums 和一个目标值 target ,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

答案:https://github.com/sisterAn/JavaScript-Algorithms/issues/4

为什么要学算法?

前端还要学算法?必须学,而且必须狠狠地学。现在去大厂面试,数据结构与算法已经是标配,要是不会的话,那基本与大厂无缘了。

作为一名前端,虽然在平常开发中很少写算法,但当我们需要深入前端框架、开发语言、开源库时,懂算法将大大提高我们看源码的能力。例如 :

  • virtual-dom diff 算法做了一些约定,后将原先 O(n3) 的时间复杂度降到了O(n) ,核心原理就是一个树的深度优先搜索
  • babel 这些就是一些编译原理的 parser 生成抽象语法树的知识,再将抽象语法树进行转换操作生成文件
  • 浏览器的 history,底层可以使用栈来实现
  • webpack 中利用 tree-shaking 优化
  • v8 中的调用栈、消息队列等等

这些就大量使用了算法,看懂了就能更好的了解它们的性能,更高效的解决问题,提升我们的代码质量与思维视野,进阶到更高 Level,赚更多钱。

所以说,学算法是每个前端进阶必备!

现在市面上的算法资料很多,但针对前端的算法资料少之又少,所以,这里我整理了一份适用于前端的数据结构与算法系列,希望能帮助你从0到1构建完整的数据结构与算法体系。

本系列预估一共有40多篇,现已经更新了前两篇。想要更多更快的学习本系列,可以关注公众号「前端瓶子君」和我的 Github(https://github.com/sisterAn/JavaScript-Algorithms),欢迎在 issus 上提出遇到的算法题,瓶子君会不定期解答。

上一篇:在 Ubuntu 上安装 K8S教程


下一篇:算法刷题:深入分析一下我和大佬的差距