0%

问题描述

Merge two sorted linked lists and return it as a sorted list. The list should be made by splicing together the nodes of the first two lists.

Constraints:

  • The number of nodes in both lists is in the range [0, 50].
  • -100 <= Node.val <= 100
  • Both l1 and l2 are sorted in non-decreasing order.
阅读全文 »

问题描述

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

阅读全文 »

问题描述

Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

Constraints:

  • 1 <= s.length <= 104
  • s consists of parentheses only '()[]{}'.
阅读全文 »

早就听闻Manjaro的口碑,其在DistroWatch上的排名也很考前,笔者之前也没有用过基于Arc的发行版,所以安装下来尝尝鲜,顺便把踩过的坑记录一下。

坑一

安装时driver有两个选项:free和nofree。这两个选项下面都会有坑。

  • 如果选择了free,那么在双显卡的电脑下会出现一系列的bug,比如桌面经常无故卡死,登录界面输入密码后黑屏等问题。
  • 如果选择了nofree,装的是bumblebee版的intel+nvidia的专有驱动。不过安装进度条会卡在93%左右的位置卡很长很长时间。因为安装完毕后执行了pacman-mirrors,国外的镜像源连接太慢,所以会卡很久。解决方法就是断网然后ps -ef | grep pacman-mirrors 找到进程杀掉,然后安装进度条很快就会跳到100%。装好进入系统后重启打开网络,更换为国内的镜像源。
阅读全文 »

输入法:

  1. 安装fcitx框架
  2. 下载搜狗输入法,并安装
  3. 系统自带输入法是ibus框架,将该框架删除,输入sudo apt-get remove ibus 命令

flash

  1. 去flash官网下载安装包,然后解压
  2. 将解压之后文件夹里的libflashplayer.so移动到firefox到插件目录
  3. 在Firefox的地址栏输入about:plugins察看flash插件是否已经安装成功。
阅读全文 »

在GNOME 3的早期版本里,可以直接修改/usr/share/gnome-shell/themes/gnome-shell.css来更改GNOME的样式,但从GNOME 3.12 开始使用 GResource 二进制资源文件保存 js/css/svg 等文件。所以,要想更改样式,必须经过下面三步:

  • 使用gresource解压封装好的二进制文件,新建脚本文件unzip.sh,然后执行该脚本,代码如下:

    1
    2
    3
    4
    5
    #!/bin/sh
    gs="/usr/share/gnome-shell/gnome-shell-theme.gresource"
    for r in `gresource list $gs`; do
    gresource extract $gs $r > theme/${r##*/}
    done
    阅读全文 »

  1. for in:可获取原型的属性,不可获取不可枚举属性
  2. for of:只能获取可迭代对象的属性
  3. Object.keys:原型属性和不可枚举属性都不能获取
  4. JSON.stringify:原型属性和不可枚举属性都不能获取
  5. Object.getOwnPropertyByNames:不可获取原型属性,可获取不可枚举属性

以上都不可获取Symbol属性

  1. Object.getOwnPropertySymbols:可获取Symbol属性
  2. Reflect.ownKeys:可获取不可枚举属性和Symbol属性,不可获取原型

先说结论

for...inObject.keys对可枚举属性进行遍历的顺序与属性的书写顺序不一定一致,因为在内部会根据属性key值的类型进行不同的排序逻辑,分三种情况:

  1. 如果属性名的类型是Number,那么Object.keys返回值是按照key从小到大排序
  2. 如果属性名的类型是String,那么Object.keys返回值是按照属性被创建的时间升序排序。

背后的执行机制

对象的属性可分为常规属性排序属性两种,在ECMAScript规范中定义了 「数字属性应该按照索引值大小升序排列,字符串属性根据创建时的顺序升序排列。」在这⾥我们把对象中的数字属性称为「排序属性」,在V8中被称为elements,字符串属性就被称为「常规属性」, 在V8中被称为properties。在V8内部,为了有效地提升存储和访问这两种属性的性能,分别使⽤了两个线性数据结构来分别保存排序属性和常规属性。

以下面这段代码为例进行说明:

阅读全文 »

普通for循环

优点:没有任何额外的函数调用栈和上下文,在大数据量的情况下,性能更好

缺点:需要额外维护变量i和迭代边界

forEach方法

forEach() 方法按升序为数组中含有效值的每一项执行一次 callback 函数,那些已删除或者未初始化的项将被跳过(例如在稀疏数组上)。

可依次向 callback 函数传入三个参数:

  1. 数组当前项的值
  2. 数组当前项的索引
  3. 数组对象本身

缺点:

  1. 只能用来对数组进行迭代操作
  2. 除了抛出异常以外,没有办法中止或跳出 forEach()循环
阅读全文 »

在阅读《高程》的时候,里面提到JS中所有函数的参数都是按值传递的,但是感觉引用类型做参数的时候,跟C中的按值传递并不完全一样,倒跟C语言中的指针传递很相似。

这里我们先跟C语言中的参数传递做一下对比。

C/C++中的参数传递

C/C++中参数传递共分为三种:

值传递

只是把实参的值传给形参,形参和实参之间并没有关联。

指针传递/地址传递

将变量的地址作为实参传递给形参,其实指针传递本质上来讲是一种特殊的值传递,传递的值是变量的地址。

阅读全文 »