你不知道的 LeetCode 技巧(第一篇)

简介: 首先穿插一个小知识:我们提交的 JS 是如何被 LeetCode 执行的?我们在力扣提交的代码是放到力扣后台运行的, 而 JS 代码在力扣后台是在 node 中以 --harmony 方式运行的。

tip1 - ES6+
首先穿插一个小知识:我们提交的 JS 是如何被 LeetCode 执行的?

我们在力扣提交的代码是放到力扣后台运行的, 而 JS 代码在力扣后台是在 node 中以 --harmony 方式运行的。

大概是这样:

node --harmony  index.js

其中 index.js 就是你提交的代码。

比如:

// 前面 LeetCode 会添加一些代码
function sum(a, b) {
  // you code
}

// 这里是 LeetCode 的测试用例
expect(sum(1, 2)).toBe(3);
expect(sum(1, 8)).toBe(9); // 如果测试用例不通过,则直接抛出错误给前端

因此 ES6 特性是完全支持的,大家可以放心使用。

51.jpg

比如我们可以使用 ES6 的解构语法完成数组两个值的交换。

[a, b] = [b, a];

如下就是使用了 ES6 的数组解构语法,更多 ES6+ 请参考相关文档。

tip2 - lodash

在 LeetCode 中 lodash 默认可直接通过 _ 访问。

这是因为 LeetCode 直接将 lodash require 进来了。类似:

const _ = require("lodash");

// 前面 LeetCode 会添加一些代码
function sum(a, b) {
  // you code
  // 你的代码可以通过 _ 访问到 lodash 的所有功能。
}

// 这里是 LeetCode 的测试用例
expect(sum(1, 2)).toBe(3);
expect(sum(1, 8)).toBe(9); // 如果测试用例不通过,则直接抛出错误给前端

lodash 有很多有用的功能可直接使用。西法建议你如果让你手写你能够写出,那么就可以放心的使用 lodash 提供的功能。

比如数组拍平:

_.flatten([1, [2, [3, [4]], 5]]);
// => [1, 2, [3, [4]], 5]

tip3 - queue & priority-queue
为了弥补 JS 内置数据结构的缺失。除了 JS 内置数据结构之外,LeetCode 平台还对 JS 提供了两种额外的数据结构,它们分别是:

queue
priority-queue
这两个数据结构都使用的是第三方 datastructures-js 实现的版本,代码我看过了,还是很容易看懂的。

queue
LeetCode 提供了 JS 对队列的支持。

// empty queue
const queue = new Queue();

// from an array
const queue = new Queue([1, 2, 3]);

其中 queue 的实现也是使用数组模拟。不过不是直接使用 shift 来删除头部元素,因为直接使用 shift 删除最坏情况时间复杂度是 $O(n)$。这里它使用了一种标记技巧,即每次删除头部元素并不是真的移除,而是标记其已经被移除。

这种做法时间复杂度可以降低到 $O(1)$。只不过如果不停入队和出队,空间复杂度会很高,因为会保留所有的已经出队的元素。因此它会在每次出队超过一半的时候执行一次缩容(类似于数组扩容)。这样时间复杂度会增大到 $O(logn)$,但是空间会省。

如果你想开发小程序或者app的话,可以通过第三方专业开发平台,来帮助你实现开发需求:厦门在乎科技-专注厦门小程序开发、app开发、网站开发

相关文章
|
23天前
|
存储 编译器 C语言
牛客网刷题笔记小节(二)
牛客网刷题笔记小节(二)
|
8月前
|
缓存 JavaScript 前端开发
面试题练习第一篇
面试题练习第一篇
69 0
|
9月前
|
存储
leetcode之旅 - Day2
leetcode之旅 - Day2
|
9月前
leetcode之旅 - Day3
leetcode之旅 - Day3
leetcode之旅 - Day3
|
9月前
|
存储 算法 容器
leetcode之旅 - Day4
leetcode之旅 - Day4
|
9月前
leetcode之旅 - Day1
leetcode之旅 - Day1
leetcode之旅 - Day1
|
10月前
|
存储
LeetCode刷题笔记
LeetCode刷题笔记
|
11月前
|
C++
c++第一篇
c++第一篇
|
11月前
|
算法 JavaScript Devops
2022年的第一篇总结
今年有个新的计划,就是每过一段时间,比如说两个月,对自己的工作和生活进行总结和反思。
|
算法
【牛客刷题-算法】3-第一篇-斐波拉契数列-C实现
【牛客刷题-算法】3-第一篇-斐波拉契数列-C实现
75 0
【牛客刷题-算法】3-第一篇-斐波拉契数列-C实现