1. 时间空间复杂度
- 时间复杂度
- 用大O表示,如O(1)、O(n)…
- 定性描述算法的运行时间
- 空间复杂度
运行过程中临时占用存储空间大小的量度
2. 栈:后进先出的结构
push、pop
- 有效的括号: https://leetcode-cn.com/problems/valid-parentheses
var isValid = function (s) {
if (s.length % 2 === 1) { return false } // 奇数个
const stack = []
const map = new Map()
map.set('{', '}')
map.set('(', ')')
map.set('[', ']')
let vaild = true
for (let i = 0; i < s.length; i++) {
const item = s[i]
if (map.has(item)) {
stack.push(item)
} else {
const p = stack[stack.length - 1]
if (map.get(p) === item) {
stack.pop() // 匹配上的就剔除了
} else {
return false
}
}
}
// 如果最后栈为空,那么它是有效的括号
return stack.length === 0 // 都是单边的情况
};
3. 队列:先进先出的结构
push、shift
- 写一个 RecentCounter 类来计算特定时间范围内最近的请求: https://leetcode-cn.com/problems/number-of-recent-calls
var RecentCounter = function () {
this.q = []
};
/**
* @param {number} t
* @return {number}
*/
RecentCounter.prototype.ping = function (t) {
this.q.push(t)
while (this.q[0] < t - 3000) {
this.q.shift()
}
return this.q.length
};