刷题总结
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]); 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; });
|