# 第三十九周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

# Review

# Tip

  • APEX[1] (opens new window)

    • apex_manifest.json:这个是apex包的清单文件,类似apk中的AndroidManifest.xmlapex_manifest.json功能比AndroidManifest.xml要复杂,里边还包含该apex安装前和安装后要执行的命令;
    • apex_pubkeyapex包的签名信息。和apk一样,我们对apex包也需要校验;
    • 其他实际内容:so,可执行程序,系统级jar包等。
  • 音视频基础知识 [2] (opens new window)

    • 视频流播放过程:解协议解封装解编码
      • 协议:指流媒体协议,有HTTPRTSPRTMP
      • 视频封装:指的是我们常见的MP4AVIRMVBMKVTSFLV等常见后缀格式,它们所表示的就是多媒体的封装协议,就是在传输过程中把音频和视频打包都一起的封装
      • 音频编码:指音频数据的编码方式,有MP3PCMWAVAAC
      • 视频编码:指画面图像的编码压缩方式,有H263H264MPEG-2MPEG-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

暂无内容

更新时间: 10/20/2022, 7:04:01 AM