JavaScript-Algorithms
JavaScript-Algorithms copied to clipboard
基础理论+JS框架应用+实践,从0到1构建整个前端算法体系
**入参格式参考:** ```js const url = 'http://sample.com/?a=1&b=2&c=xx&d=#hash'; ``` **出参格式参考:** ```js const result = { a: '1', b: '2', c: 'xx', d: '' }; // 拆解URL参数中queryString,返回一个 key - value 形式的 object ```
```js const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); const subFlow = createFlow([() => delay(1000).then(() => console.log("c"))]); createFlow([ () => console.log("a"), () => console.log("b"), subFlow, [() => delay(1000).then(()...
厉害
快排使用了分治策略的思想,所谓分治,顾名思义,就是分而治之,将一个复杂的问题,分成两个或多个相似的子问题,在把子问题分成更小的子问题,直到更小的子问题可以简单求解,求解子问题,则原问题的解则为子问题解的合并。 快排的过程简单的说只有三步: - 首先从序列中选取一个数作为基准数 - 将比这个数大的数全部放到它的右边,把小于或者等于它的数全部放到它的左边 (一次快排 `partition`) - 然后分别对基准的左右两边重复以上的操作,直到数组完全排序 具体按以下步骤实现: - 1,创建两个指针分别指向数组的最左端以及最右端 - 2,在数组中任意取出一个元素作为基准 - 3,左指针开始向右移动,遇到比基准大的停止 - 4,右指针开始向左移动,遇到比基准小的元素停止,交换左右指针所指向的元素 - 5,重复3,4,直到左指针超过右指针,此时,比基准小的值就都会放在基准的左边,比基准大的值会出现在基准的右边 - 6,然后分别对基准的左右两边重复以上的操作,直到数组完全排序 注意这里的基准该如何选择喃?最简单的一种做法是每次都是选择最左边的元素作为基准:  但这对几乎已经有序的序列来说,并不是最好的选择,它将会导致算法的最坏表现。还有一种做法,就是选择中间的数或通过 `Math.random()` 来随机选取一个数作为基准,下面的代码实现就是以随机数作为基准。 **代码实现** ```js...
打乱一个没有重复元素的数组。 **示例:** ```js // 以数字集合 1, 2 和 3 初始化数组。 int[] nums = {1,2,3}; Solution solution = new Solution(nums); // 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。 solution.shuffle(); // 重设数组到它的初始状态[1,2,3]。 solution.reset(); // 随机返回数组[1,2,3]打乱后的结果。...
腾讯算法题
```js const arr = [101,19,12,51,32,7,103,8]; ``` **问题一:** 找出连续最大升序的数量 **问题二:** 找出不连续最大升序的数量
可参考来源: [第 103 题:模拟实现一个 localStorage](https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/166) ### 一、localStorage 特性 **1. Storage Interface** - getItem(key) - setItem(key, value) - removeItem(key) - clear() - key(index) - length:readonly **2. 持久化存储** 刷新、关闭页面依然存在 **3. localStorage 中的键值对总是以字符串的形式存储...
1. 如传入的数组元素为 `[123, "meili", "123", "mogu", 123]` ,则输出: `[123, "meili", "123", "mogu"]` 2. 如传入的数组元素为 `[123, [1, 2, 3], [1, "2", 3], [1, 2, 3], "meili"]` ,则输出: `[123, [1, 2, 3],...