每日两题 T24

时间:2022-07-22
本文章向大家介绍每日两题 T24,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

算法

LeetCode T445. 两数相加 II[1]

描述

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

示例

输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7

分析

此题为两数之和的变体,两数之和是链表从根节点向后遍历相加,而此题是从后往前相加进位。很容易想到的思路是:将链表先旋转,求和后在旋转回去。这里我们必须联想到, 对于数据处理的一个优势,栈元素始终是后进先出,因此我们可以将两个链表各节点数字入栈,待 l1 入栈 stack1 , l2 入栈 stack2 完毕后,出栈求解两数之和从而生成新的链表节点,并连接成链表。

代码

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function (l1, l2) {
  let stack1 = [];
  let stack2 = [];
  while (l1) {
    stack1.push(l1.val);
    l1 = l1.next;
  }
  while (l2) {
    stack2.push(l2.val);
    l2 = l2.next;
  }
  let mark = 0;
  let res = null;
  while (stack1.length > 0 || stack2.length > 0 || mark !== 0) {
    let val1 = stack1.length > 0 ? stack1.pop() : 0;
    let val2 = stack2.length > 0 ? stack2.pop() : 0;
    let val = val1 + val2 + mark;
    mark = val / 10 | 0;
    curNode = new ListNode(val % 10);
    curNode.next = res;
    res = curNode;
  }
  return res;
};

前端

Web Worker 是什么,如何使用

是什么

JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。

在主入口或组件文件

var worker = new Worker('work.js');

向 Web Worker发送计算请求

worker.postMessage('calculate');
worker.postMessage({method: 'echo', args: ['Work']});

此时我们需要监听 Web Worker发送回来的消息

worker.onmessage = function (event) {
  console.log('Received' + event.data);
  // doSomething...
}

完成以后,关闭

worker.terminate();

在work线程(work.js)

self.addEventListener('message', function (e) {
  self.postMessage('You said: ' + e.data);
}, false);
// 或者
this.addEventListener('message', function (e) {
  self.postMessage('You said: ' + e.data);
}, false);
// 或者
addEventListener('message', function (e) {
  self.postMessage('You said: ' + e.data);
}, false);

self.close();

加载其他脚本

importScripts('script1.js');

关于错误的处理

worker.addEventListener('error', function (event) {
  // ...
});

References

[1] 445. 两数相加 II: https://leetcode-cn.com/problems/add-two-numbers-ii/