算法题

https://leetcode-cn.com/problems/design-a-stack-with-increment-operation/

请你设计一个支持下述操作的栈。

实现自定义栈类 CustomStack :

CustomStack(int maxSize):用 maxSize 初始化对象,maxSize 是栈中最多能容纳的元素数量,栈在增长到 maxSize 之后则不支持 push 操作。
void push(int x):如果栈还未增长到 maxSize ,就将 x 添加到栈顶。
int pop():弹出栈顶元素,并返回栈顶的值,或栈为空时返回 -1 。
void inc(int k, int val):栈底的 k 个元素的值都增加 val 。如果栈中元素总数小于 k ,则栈中的所有元素都增加 val 。

示例:

输入:
[“CustomStack”,”push”,”push”,”pop”,”push”,”push”,”push”,”increment”,”increment”,”pop”,”pop”,”pop”,”pop”]
[[3],[1],[2],[],[2],[3],[4],[5,100],[2,100],[],[],[],[]]
输出:
[null,null,null,2,null,null,null,null,null,103,202,201,-1]
解释:
CustomStack customStack = new CustomStack(3); // 栈是空的 []
customStack.push(1); // 栈变为 [1]
customStack.push(2); // 栈变为 [1, 2]
customStack.pop(); // 返回 2 —> 返回栈顶值 2,栈变为 [1]
customStack.push(2); // 栈变为 [1, 2]
customStack.push(3); // 栈变为 [1, 2, 3]
customStack.push(4); // 栈仍然是 [1, 2, 3],不能添加其他元素使栈大小变为 4
customStack.increment(5, 100); // 栈变为 [101, 102, 103]
customStack.increment(2, 100); // 栈变为 [201, 202, 103]
customStack.pop(); // 返回 103 —> 返回栈顶值 103,栈变为 [201, 202]
customStack.pop(); // 返回 202 —> 返回栈顶值 202,栈变为 [201]
customStack.pop(); // 返回 201 —> 返回栈顶值 201,栈变为 []
customStack.pop(); // 返回 -1 —> 栈为空,返回 -1

提示:

1 <= maxSize <= 1000
1 <= x <= 1000
1 <= k <= 1000
0 <= val <= 100
每种方法 increment,push 以及 pop 分别最多调用 1000 次

  1. /**
  2. * @param {number} maxSize
  3. */
  4. var CustomStack = function(maxSize) {
  5. this.maxSize = maxSize
  6. this.arr = []
  7. };
  8. /**
  9. * @param {number} x
  10. * @return {void}
  11. */
  12. CustomStack.prototype.push = function(x) {
  13. if (this.arr.length < this.maxSize) {
  14. this.arr.push(x)
  15. }
  16. };
  17. /**
  18. * @return {number}
  19. */
  20. CustomStack.prototype.pop = function() {
  21. if (this.arr.length > 0) {
  22. return this.arr.pop()
  23. } else {
  24. return -1
  25. }
  26. };
  27. /**
  28. * @param {number} k
  29. * @param {number} val
  30. * @return {void}
  31. */
  32. CustomStack.prototype.increment = function(k, val) {
  33. for(let i = 0; i<this.arr.length;i++) {
  34. if (k > i) {
  35. this.arr[i] += val
  36. }
  37. }
  38. };

没什么特别的

手写题

https://bigfrontend.dev/zh/problem/implement-Promise-allSettled

  1. function allSettled(promises) {
  2. // your code here
  3. if (!promises.length) {
  4. return Promise.resolve([])
  5. }
  6. const arr = []
  7. let idx = 0
  8. return new Promise((resolve) => {
  9. for(let i = 0; i<promises.length;i++) {
  10. Promise.resolve(promises[i]).then(data => {
  11. arr[i] = ({
  12. status: 'fulfilled',
  13. value: data
  14. })
  15. }).catch(err => {
  16. arr[i] = ({
  17. status: 'rejected',
  18. reason: err
  19. })
  20. }).finally(() => {
  21. idx++;
  22. if(idx === promises.length) {
  23. resolve(arr)
  24. }
  25. })
  26. }
  27. })
  28. }

注意点:

  1. 可能不是promise,所以需要用promise.resolve包裹一层
  2. 输入prmose的顺序和输出promise的顺序一致,不能使用arr.push