刷题总结

1.快慢指针

如果遇到链表操作,比如找链表最后几位,或者是找链表中间值,就可以用快慢指针。

如果快指针比慢指针快几位,那么,当快指针遍历结束时,慢指针的位置也就是所求的位置。

如果快指针速度是慢指针两倍,也就是快指针走两步,慢指针走一步,那么快指针遍历结束时,慢指针正好达到链表中点

2.排列组合:全排列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var permute = function (nums) {
let res = [];
let vis = {};
let dfs = (t) => {
if (t.length == nums.length) {
res.push(t);
}
for (let i = 0; i < nums.length; i++) {

if (vis[i]) continue;
vis[i] = true;
t.push(nums[i]);
// 对t进行深拷贝
dfs(t.slice(0));
t.pop();
vis[i] = false;
}
}
dfs([]);
return res;
};

3.数组去重

1
2
3
4
5
let arr1 = [1, 2, 1, 3, 1];
let arr2 = [];
arr1.forEach(function (self, index, arr) {
arr.indexOf(self) === index ? arr2.push(self) : null;
});