你不会找到路,除非你敢于迷路

0%

ARTS-No.8

Algorithm

1266. 访问所有点的最小时间

思路:

这其实更像是一个数学问题.

因为需要按顺序访问所有点, 所以可以把问题简化为计算两个点之间的最小距离, 最后把每两个点之间的最小距离累加, 问题得解.

接下来要计算两个点之间的最小距离, 因为走对角线的效率是分别走横竖的两倍, 所以我们要尽可能多地走对角线. 那么两个点之间势必会形成一块而走对角线的正方形区域, 正方形的边长就是以两点为对角形成的长方形的较短的一条边. 剩余的距离一直横着或者竖着走即可. 问题得解.

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public int minTimeToVisitAllPoints(int[][] points) {
if (points.length <= 1) {
return 0;
}

int total = 0;
int[] last = points[0];
for (int i = 1; i < points.length; i++) {
int[] current = points[i];
int x = Math.abs(current[0] - last[0]);
int y = Math.abs(current[1] - last[1]);

int italic = Math.min(x, y);
int straight = Math.max(x, y) - italic;
int move = italic + straight;
total += move;

last = current;
}

return total;
}
}

执行用时: 1ms, 内存消耗: 41.4MB.

Review

声明!!!

水平以及精力有限, 下文可能存在很多问题错译, 仅做个人学习之用, 如果需要学习 Docker, 还请查阅其他资料!!!

Get Docker Engine - Community for Ubuntu

卸载旧版命令

1
sudo apt-get remove docker docker-engine docker.io containerd runc

使用 Docker 仓库安装 Docker

  1. 升级 APT 安装包索引

    1
    sudo apt-get update
  2. 安装下列软件包以允许 apt 命令使用 https 仓库

    1
    2
    3
    4
    5
    6
    sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
  3. 添加 Docker 官方的 GPG 秘钥

    1
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

    通过指纹验证秘钥已经正确添加:

    1
    sudo apt-key fingerprint 0EBFCD88
  4. 使用如下命令设置 Docker 稳定版仓库

    1
    2
    3
    4
    sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"
  5. 安装最新版本的 Docker 引擎社区版和 containerd

    1
    2
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io

至此, Docker 引擎社区办已经安装完成. 如果有需要, 也可以安装指定版本, 步骤请参考原文.

现在只能通过 sudo 执行 docker 命令, 如果想要通过普通账户运行 docker 命令, 需要把指定的用户添加进 docker 用户组 (这个操作会让指定用户获取 Docker 容器的 root 权限.):

1
sudo usermod -aG docker your-user

需要退出当前账户并重新登录来使上面的命令完全生效.

Docker 还可以通过 .deb 文件或者 脚本文件安装, 具体步骤参见原文.

卸载 Docker 引擎社区版

  1. 卸载 Docker 引擎社区版

    1
    sudo apt-get purge docker-ce
  2. 删除 Docker 镜像, 容器, 卷, 配置文件等

    1
    sudo rm -rf /var/lib/docker

Tip

MySQL 中的 null 和 not null

MySQL 中 null 值的检索

之前偶然间写了一个 SQL, 发现执行结果和预期不符, 最终发现是 null 的问题. MySQL 中 null 值是不能用 = 号比较的, 结果始终是 null. (此外, 使用 >, <, +, -, != 等操作符操作 null 结果始终是 null.)

下面语句的执行结果会是 null:

1
SELECT NULL = NULL;
1
SELECT NULL != NULL

那么怎么检索 null 值呢? 我们可以使用 ISIS NOT 关键字或者 <=> 操作符或者 ISNULL() 方法:

1
SELECT NULL IS NULL
1
SELECT NULL IS NOT NULL
1
SELECT NULL <=> NULL
1
SELECT ISNULL(NULL)

MySQL 中 null 和 空值 的区别

  • MySQL 中 null 是会占用空间的, 表示 “a missing unknown value”;
  • MySQL 中 空值 是不占用空间的;

eg: 空值 代表什么都没有, 而 null 值代表有一个空杯子, 虽然杯子里面什么都没有, 但空杯子还是会占用空间.

其他

  1. 使用排序时, null 会被当作是一个无穷小的值;
  2. 聚合函数 count(), min(), sun() 是忽略 null 值的, 但是 count(*) 例外;
  3. 在 MyISAM, InnoDB 和 MEMORY 引擎中, 是可以在包含 null 值的列添加索引的, 而在其它引擎中 not null 列才可以添加索引;
  4. 如果在一个 timestamp 列插入 null 值, 则当前时间会被自动插入; 如果在一个自增列插入 null 值, 则下一个自增值会被自动插入;

参考文献

  • MySQL NULL值处理详细说明 — zejin

Share

实验 - 时间梳理

这周做了一个小实验, 刻意梳理并充分利用自己的时间, 看看最后会有什么变化. 欢迎围观 / 参考 / 同行.

微信公众号
扫码关注, 一起进步!