每日两题 T36
算法
LeetCode T面试题56 - I. 数组中数字出现的次数[1]
描述
一个整型数组 nums
里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
示例1 :
输入:nums = [4,1,4,6]
输出:[1,6] 或 [6,1]
示例2:
输入:nums = [1,2,10,4,1,4,3,3]
输出:[2,10] 或 [10,2]
限制:
•2 <= nums <= 10000
分析
hash表解决这个问题很简单,见代码。
代码
var singleNumbers = function(nums) {
var obj = {}
nums.forEach(count => {
let attr = count + ""
obj[attr] ? delete obj[attr] :(obj[attr] = 1)
})
return Object.keys(obj)
};
前端
浏览器和Node 事件循环的区别
浏览器
关于微任务和宏任务在浏览器的执行顺序是这样的:
•执行一只task(宏任务)•执行完micro-task队列 (微任务)
如此循环往复下去
浏览器的task(宏任务)执行顺序在 html#event-loops[2] 里面有讲就不翻译了 常见的 task(宏任务) 比如:setTimeout、setInterval、script(整体代码)、 I/O 操作、UI 渲染等。常见的 micro-task 比如: new Promise().then(回调)、MutationObserver(html5新特性) 等。
Node
Node的事件循环是libuv实现的,引用一张官网的图:
大体的task(宏任务)执行顺序是这样的:
•timers定时器:本阶段执行已经安排的 setTimeout() 和 setInterval() 的回调函数。•pending callbacks待定回调:执行延迟到下一个循环迭代的 I/O 回调。•idle, prepare:仅系统内部使用。•poll 轮询:检索新的 I/O 事件;执行与 I/O 相关的回调(几乎所有情况下,除了关闭的回调函数,它们由计时器和 setImmediate() 排定的之外),其余情况 node 将在此处阻塞。•check 检测:setImmediate() 回调函数在这里执行。•close callbacks 关闭的回调函数:一些准备关闭的回调函数,如:socket.on('close', ...)。
微任务和宏任务在Node的执行顺序
Node 10以前:
•执行完一个阶段的所有任务•执行完nextTick队列里面的内容•然后执行完微任务队列的内容
Node 11以后:和浏览器的行为统一了,都是每执行一个宏任务就执行完微任务队列。
References
[1]
面试题56 - I. 数组中数字出现的次数: https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/
[2]
html#event-loops: https://html.spec.whatwg.org/multipage/webappapis.html#event-loops
- 浅谈差分约束问题
- JVM活学活用——类加载机制
- WebAssembly详解及其使用案例
- 30分钟精通快应用
- BZOJ2440: [中山市选2011]完全平方数(莫比乌斯+容斥原理)
- Dapper扩展之~~~Dapper.Contrib
- JVM活学活用——GC算法 垃圾收集器
- BZOJ1101: [POI2007]Zap(莫比乌斯反演)
- freeRTOS事件组学习
- 洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)
- JVM活学活用——优化springboot
- .Net中的AOP读书笔记系列之AOP介绍
- 洛谷P3327 [SDOI2015]约数个数和(莫比乌斯反演)
- .Net中的AOP系列之构建一个汽车租赁应用(上)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php实现微信分享朋友链接功能
- python交互模式基础知识点学习
- 浅析Python 抽象工厂模式的优缺点
- 基于PyTorch的permute和reshape/view的区别介绍
- Laravel配置全局公共函数的方法步骤
- PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
- python–shutil移动文件到另一个路径的操作
- PHP正则表达式处理函数(PCRE 函数)实例小结
- yii2的restful api路由实例详解
- PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
- 用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
- Python操作MySQL数据库的示例代码
- 解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
- PyCharm中配置PySide2的图文教程
- 浅析Python 简单工厂模式和工厂方法模式的优缺点