# 第三十九周ARTS总结
# Algorithm
1ms | 92.85% Run time
37.4MB | 95.74% Memory
public List<List<Integer>> permute(int[] nums) {
if (nums.length == 0) {
return new ArrayList<>();
}
// 数组只有一个元素的时候
if (nums.length == 1) {
List<List<Integer>> ans = new ArrayList<>();
List<Integer> item = new ArrayList<>();
item.add(nums[0]);
ans.add(item);
return ans;
}
// 数组元素个数大于等于2的时候
return recursivePermute(nums, 0);
}
/**
* 获取从index开始后边所有数的全排列
*
* @param nums 给定数组
* @param index 开始索引
* @return
*/
public List<List<Integer>> recursivePermute(int[] nums, int index) {
List<List<Integer>> ans = new ArrayList<>();
// 最后两个数的全排列
if (nums.length - index == 2) {
List<Integer> item1 = new ArrayList<>();
item1.add(nums[index]);
item1.add(nums[index + 1]);
List<Integer> item2 = new ArrayList<>();
item2.add(nums[index + 1]);
item2.add(nums[index]);
ans.add(item1);
ans.add(item2);
} else {
// 获取index以后所有数的全排列
List<List<Integer>> temp = recursivePermute(nums, index + 1);
// 加上当前数(插入到所有排列的所有空隙)
for (List<Integer> list : temp) {
for (int i = 0; i <= list.size(); i++) {
List<Integer> item = new ArrayList<>(list);
item.add(i, nums[index]);
ans.add(item);
}
}
}
return ans;
}
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# Review
# Tip
APEX包 [1] (opens new window)
- apex_manifest.json:这个是
apex
包的清单文件,类似apk
中的AndroidManifest.xml
。apex_manifest.json
功能比AndroidManifest.xml
要复杂,里边还包含该apex
安装前和安装后要执行的命令; - apex_pubkey:
apex
包的签名信息。和apk
一样,我们对apex
包也需要校验; - 其他实际内容:
so
,可执行程序,系统级jar
包等。
- apex_manifest.json:这个是
音视频基础知识 [2] (opens new window)
- 视频流播放过程:解协议→解封装→解编码
- 协议:指流媒体协议,有
HTTP
、RTSP
、RTMP
等 - 视频封装:指的是我们常见的
MP4
、AVI
、RMVB
、MKV
、TS
、FLV
等常见后缀格式,它们所表示的就是多媒体的封装协议,就是在传输过程中把音频和视频打包都一起的封装 - 音频编码:指音频数据的编码方式,有
MP3
、PCM
、WAV
、AAC
等 - 视频编码:指画面图像的编码压缩方式,有
H263
、H264
、MPEG-2
、MPEG-4
等
- 协议:指流媒体协议,有
- 视频流播放过程:解协议→解封装→解编码
Docker常用命令 [3] (opens new window):
docker run hello-world
:装载镜像,运行容器,并退出docker pull busybox
:拉取一个镜像docker images
:列出所有的镜像docker run busybox echo "hello from busybox"
:向指定镜像中运行一段指定命令docker ps -a
:显示所有的容器docker run -it busybox
:运行一个容器,并保持tty连接docker run -d -P --name static-site prakhar1989/static-site
:启动容器,分离终端,自定义名称,发布所有暴露端口docker stop static-site
:暂停指定容器docker rm 指定容器ID
:删除指定容器docker rm $(docker ps -a -q -f status=exited)
:删除所有容器docker container prune
:删除所有容器docker rmi
:删除指定镜像
Docker术语 [4] (opens new window):
- Images:镜像
- Containers:容器
- Docker Daemon:在主机上运行的后台服务,用于管理建立、运行和分发Docker容器
- Docker Client:命令行工具,允许用户与守护进程交互
- Docker Hub:所有可用的Docker映像的目录
终端设置代理的方式
export http_proxy='http://localhost:1087' export https_proxy='http://localhost:1087'
1
2
# Share
暂无内容