VIRTUALS

the virtual labs for the virtuals

0%

  • 淫字论事不论心,论心千古无完人。孝字论心不论事,论事千古无孝子。

  • 肉体才是人的神殿,不管里面供奉的是什么,都应该好好保持它的强韧、美丽和清洁。 ——《1Q84》村上春树

  • 真诚感谢四步法:

    说明行为:就是说清楚对方具体帮你做了什么事;
    说清影响:说明他帮你的这件事,为你解决了什么问题;
    分享感受:表达受到帮助后的真实感受;
    投桃报李:表明对方有需要的话,你也愿意尽力帮忙。

  • 彭林教授(清华大学人文学院历史系)反对父亲节、母亲节等西方节日。因为中国人是有孝道的,一年四季没有哪一天不孝,君子有终身之孝。而西方人它是没有孝道的,所以他们要找出一天来表示一下。

题目

给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

示例:

输入: [1,2,3,4]
输出: [24,12,8,6]

提示: 题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。

说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。

进阶: 你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)


左右乘积数组

维护两个数组,分别存放nums[i]左右乘积。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public int[] productExceptSelf(int[] nums) {
int len = nums.length;
int[] left = new int[len];
for (int i = 0; i < len; i++) {
if (i == 0) {
left[i] = 1;
continue;
}
left[i] = left[i - 1] * nums[i - 1];
}
int[] right = new int[len];
for (int j = len - 1; j > -1; j--) {
if (j == len - 1) {
right[j] = 1;
continue;
}
right[j] = right[j + 1] * nums[j + 1];
}
int[] output = new int[len];
for (int k = 0; k < len; k++) {
output[k] = left[k] * right[k];
}
return output;
}
}

复杂度:

  • 时间复杂度:O(N) 其中 O(N) 指的是数组 nums 的大小。预处理 leftright 数组以及最后的遍历计算都是 O(N) 的时间复杂度。
  • 空间复杂度:O(N) 其中 O(N) 指的是数组 nums 的大小。使用了 leftright 数组去构造答案,leftright 数组的长度为数组 nums 的大小。

进一步优化 O(1) 的空间复杂度

可以使用答案数组来替代 left 数组,从右向左遍历,动态更新 nums[i] 右侧乘积。
也可以使用答案数组来替代 right 数组,从左向右遍历,动态更新 nums[i] 左侧乘积。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int[] productExceptSelf(int[] nums) {
int len = nums.length;
int[] output = new int[len];
output[len -1 ] = 1;
for (int i = len - 2; i >= 0; i--) {
output[i] = output[i + 1] * nums[i + 1];
}
int left = 1;
for (int j = 0; j < len; j++) {
if (j == 0) left = 1;
else left = left * nums[j - 1];
output[j] = left * output[j];
}
return output;
}
}

复杂度:

  • 时间复杂度:O(N),其中 O(N) 指的是数组 nums 的大小。分析与方法一相同。
  • 空间复杂度:O(1),输出数组不算进空间复杂度中,因此我们只需要常数的空间存放变量。

题目

给你一个数组candies和一个整数extraCandies,其中candies[i] 代表第 i个孩子拥有的糖果数目。

对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。

示例1:

输入: candies = [2,3,5,1,3], extraCandies = 3
输出: [true,true,true,false,true]
解释:
孩子 1 有 2 个糖果,如果他得到所有额外的糖果(3个),那么他总共有 5 个糖果,他将成为拥有最多糖果的孩子。
孩子 2 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。
孩子 3 有 5 个糖果,他已经是拥有最多糖果的孩子。
孩子 4 有 1 个糖果,即使他得到所有额外的糖果,他也只有 4 个糖果,无法成为拥有糖果最多的孩子。
孩子 5 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。

示例2:

输入: candies = [4,2,1,1,2], extraCandies = 1
输出: [true,false,false,false,false]
解释: 只有 1 个额外糖果,所以不管额外糖果给谁,只有孩子 1 可以成为拥有糖果最多的孩子。

示例3:

输入: candies = [12,1,12], extraCandies = 10
输出: [true,false,true]

提示:

  • 2 <= candies.length <= 100
  • 1 <= candies[i] <= 100
  • 1 <= extraCandies <= 50

枚举

没啥好说的,儿童节快乐!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
int len = candies.length;
int max = candies[0];
for (int i = 0; i < len; i++) {
max = Math.max(max, candies[i]);
}
List<Boolean> res = new ArrayList<>();
for (int i = 0; i < len; i++) {
res.add(candies[i] + extraCandies >= max);
}
return res;
}
}
题目链接

https://leetcode-cn.com/problems/kids-with-the-greatest-number-of-candies/

为什么要用Anaconda

Anaconda解决了官方Python的两大痛点。

  • 提供了包管理功能,Windows平台安装第三方包经常失败的场景得以解决。
  • 提供环境管理的功能,功能类似Virtualenv,解决了多版本Python并存、切换的问题。

下载安装conda

1
2
wget https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh
bash Anaconda3-2019.07-Linux-x86_64.sh

把conda加入PATH

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/root/anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
\eval "$__conda_setup"
else
if [ -f "/root/anaconda3/etc/profile.d/conda.sh" ]; then
. "/root/anaconda3/etc/profile.d/conda.sh"
CONDA_CHANGEPS1=false conda activate base
else
\export PATH="/root/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda init <<<
参考

基础命令

  • cd ~ 进入家目录,家目录的定义为 home下的用户名目录;
  • cd - 进入上一次目录;
  • Ctrl + C 结束当前进程进或当前行的属于进入下一行;
  • Ctrl + U 清空当前行输入;
  • Tab 补全命令、文件、路径,底层是Trie前缀树实现;
  • pwd 显示当前所在目录
  • ls -l 显示当前目录下文件和目录详情,l表示 long list;
  • ls -h 人性化显示当前目录下文件和目录详情,h表示 human readable;
  • ls -a 显示当前目录下所有文件和目录,包括.开头的隐藏目录,a表示 all;
  • cp src dst 复制并重命名路径src到dst;
  • mv src dst 移动并重命名路径src到dst;
  • touch 创建一个文件,后面可以加空格并列创建多个;
  • mkdir 创建一个文件夹,后面可以加空格并列创建多个;
  • history 显示用过的历史命令;
  • rm 删除文件或文件夹,删除文件夹时一般加 -r参数递归删除子目录,r表示recursive;
  • cat 查看文件;

功能性命令汇总

查找当前目录及子目录特定文件(夹)并删除

find . -name "*.zip" -type f -print -exec rm {} \;

  • .即从当前目录递归查找
  • -name '*.zip'查找以.zip文件名结尾的对象
  • -type f该对象为文件
  • -print屏幕输出
  • -exec查找之后执行
  • rm删除
    如果希望删除目录,可以-type d,其表示对象为目录。另外如果希望递归删除,可以rm -r。如果希望递归强制删除,可以rm -rf

查找当前目录及子目录特定文件并移动到目标目录

find . -name "*.mp4" -type f -print -exec mv -t /home/AriaGo/ {} +;

部署hexo的用户:A
新用户:B

在Windows平台由A切换B之后,A配置的hexo没法直接使用。

解决方法

  • C:\Users\A\AppData\Roaming下的npm目录拷贝到C:\Users\B\AppData\Roaming

    这里是hexo的安装目录,在新用户下不用重新安装。

  • C:\Users\A下的.ssh目录拷贝到C:\Users\B

    这里存放着用于连接Github的ssh公钥和私钥。

  • C:\Users\A下的node_modules目录拷贝到C:\Users\B

    这里是安装node之后用来存放npm下载的各种包的地方,我们不用重新执行npm install,直接拷贝即可。

  • C:\Users\B\AppData\Roaming\npm添加到B的用户环境变量。

    这一步可以让我们在新用户B下直接执行hexo命令。

  • T:\Git\root\Git\cmd添加到B的用户环境变量。

    这样可以在B下执行git命令。

同一台计算机不同不同用户之间转移hexo运行环境要比不同计算机之间更加方便。

参考:

https://hexo.io/zh-cn/docs/
https://zhuanlan.zhihu.com/p/35668237
https://www.zhihu.com/question/21193762
https://m.html.cn/qa/node-js/12146.html
https://www.ruanyifeng.com/blog/2016/01/npm-install.html

为了给未分配实例的外部IP地址分配实例,必须要保证新的实例与该IP地址在同一地区。
pic0x0

直接在新的实例中选择保留的IP地址。
pic0x1

这样当我们删除一个实例,但希望把保留的IP地址应用到新的实例时,就可以很方便地操作。

speedtest-cli

  • 下载speedtest-cli
    wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
  • 添加可执行权限
    chmod +x speedtest-cli
  • 以默认的Mbps为单位测速
    ./speedtest-cli
  • 以MB为单位测速
    ./speedtest-cli --byte
  • 查看可用测速服务器
    ./speedtest-cli --list
  • 选择指定服务器测速
    ./speedtest-cli --server NumberOfServer
  • 获取帮助
    ./speedtest-cli --help

superspeed

  • 下载superspeed
    . wget https://raw.githubusercontent.com/oooldking/script/master/superspeed.sh
  • 添加可执行权限
    chmod +x superspeed.sh
  • 测速
    ./superspeed.sh