JohnApache
JohnApache
这一题用了两种方案, 第一种方案算是暴力写法,也是大多数人常规思路 第二种方案是用了 基于队列的方式 其实,我们没必须存储窗口内的所有元素。 如果新进入的元素比前面的大,那么前面的元素就不再有利用价值,可以直接移除,这样队列对应的值其实就是一个单调递减的队列, **暴力写法** 思路清晰,但是代码时间复杂度高 Om*n ```ts const maxSlidingWindow = (nums: number[], k: number) => { const result = []; for (let i = 0; i <...
我自己用了递归回溯的方式,也是只扫描了一遍,虽然没有 `快慢指针` 巧妙,但大家也可以参考一下 ```ts const removeNthFromEnd = (head: Node | undefined, n: number) => { if (n { if (!node) return 0; const deep = fn(node, node.next) + 1; if...
> 用Map是O(n)的时间 > > ```js > var intersection = function(nums1, nums2) { > const map = {}, ans = []; > nums1.forEach(element => { > map[element] = true; > });...
**反向求和的情况** 利用了 **递归回溯** ```ts const addTwoNumbers = (list1: Node, list2: Node) => { let multy = 0; const fn = (next1: Node | undefined, next2: Node | undefined) => {...
利用栈 存储以扫描过的字符,每次读取字符的时候都会跟栈顶元素进行比较,如果相同就推出栈顶元素,否则字符入栈 ```ts const removeDuplicates = (source: string) => { if (source.length 0 && char === stack[stack.length - 1]) { stack.pop(); continue; } stack.push(char); } return stack.join(''); }; ```
利用栈保存读取到的字符,判断是否为有效,只需判断当出现反向符号的时候,栈顶符号一定是对应的正向符号,如果是,就推出栈顶符号,继续遍历,如果不是直接返回false, ```ts const isValid = (source: string) => { const len = source.length; if (len
你们项目后期有没有规划过UT这块呢?我们现在业务场景也是用的taro三端同构,但是现在在做UT这块卡壳了 不知道怎么处理才是最适合的
但是如果使用你的 package.lock, yarn.lock 文件, 就不会报错了,