JohnApache
JohnApache
可能用的指针比较多,基本原理也是双指针,做了一个右边双指针为了补全左双指针无法覆盖到的位置,应该有优化的空间 ```ts const trap = (height: number[]) => { const len = height.length; if (len fastLeftHeight) { currentTotalHeight += fastLeftHeight; fastLeftPos++; continue; } result += (fastLeftPos - slowLeftPos) * slowLeftHeight...
没有使用Js自带的 `parseInt` api, 实现了效果 ```ts const INT_MAX = Math.pow(2, 31) - 1; const INT_MIN = -Math.pow(2, 31); const atoi = (str: string) => { let i = 0; let char...
为什么都用`list` + `map`, `list` 存储数据方便,但是删除数据就不算很优雅了啊,我直接用了 两个 `map` 实现这个效果 ```ts class RandomizedSet { private mapValueToIndex: Record = {}; private mapIndexToValue: Record = {}; public length: number = 0; insert (data: number)...
没想到特别好的方法,只能用两个 `for`, 这个和相加,相乘和相加不一样, ```ts const multiplyStrings = (str1: string, str2: string) => { if (!str1 || !str2) return ''; const len1 = str1.length; const len2 = str2.length; let total =...
```ts class MinStack { private _stack: number[] = [] private min: number | undefined; push (data: number) { if (this.min === undefined) { this.min = data; } else { this.min...
和 删除 `k ` 位数一样的方案, 使用 带有 `count` 字段的对象 作为栈节点, 方便 `pop`的操作,但是不同的是 边界条件的判断, 因为是 ,不知道会重复多少次,所以删除节点放到 `push` 下一个不同字符的节点前, 一起删除, 还有需要注意的边界条件有两点 + 删除节点后下一个值可能会和上一个值重复,这里需要再做一次单独判断,给重复的节点 `count` 累加,用于下轮判断的时候删除 + 当字符扫描到最后一位的时候,由于我们是在 `push` 前 `pop`, 做了前面的一点的判断只会给节点的 `count`...
利用了 `Map` 存储已经存放的char ```ts const lengthOfLongestSubstring = (source: string) => { if (source.length
> ### 解法一:标记法(简单但空间复杂度为O(n),不符合,仅做参考) > **解题思路:** 两次遍历,先遍历一个链表,给链表中的每个节点都增加一个标志位,然后遍历另外一个链表,遍历到第一个已被标志过的节点为两链表相交的起始节点。 > > 若遍历完都没有发现已被标志过的节点,则两链表不相交,返回 `null` > > ```js > const getIntersectionNode = function(headA, headB) { > while(headA) { > headA.flag = true > headA =...
和删除相邻重复项是同一个类型,利用栈来存储扫描过的字符,不一样的是该题支持 `k` 个,这个理论上可以按照上一题一样的原则,直接推栈就好了,但是出栈的时候,考虑到 假如 `k` 值很大,会做很多重复性的 `pop` 工作,所以我这里 将 栈的节点从单纯存储读取的字符, 改为 一个 对象,对象保存了读取的字符,和已经读取的字符数量,这样每次 `pop` 只需要一次即可完成任务 ```ts interface StackNode { value: string; count: number; } const removeDuplicates = (source: string, k:...
想了很久,还是做了两次遍历,使用 `map` ```ts const firstUniqChar = (source: string) => { if (source.length