7.18 每日学习

77 阅读3分钟

来源:LeetCode面试经典 150 题

第二题:移除元素

题目描述:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:

输入:nums = [3,2,2,3], val = 3

输出:2, nums = [2,2]

解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2

输出:5, nums = [0,1,4,0,3]

解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

解题思路

这也是个简单题,思路也很简单,循环遍历数组中所有元素,然后将相同的数去掉即可。 一遍过,直接丢代码。

func removeElement(nums []int, val int) int {
    length := len(nums)
    l :=length
    j:=0
    for i:=0 ; i<length ; i++{
        if nums[i] != val{
            nums[j]=nums[i]
            j++
        }else{
             l--
        }
    }
    return l
}

官方解题答案

emmm,好嘛官方第二种双指针优化和我的解题思路一样。没啥好说了,过。 再奖励自己一道题

dockerfile

什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

DockerFile的保留字指令

  1. FROM:指定基础镜像
  2. MAINTAINER:镜像维护者姓名及邮箱地址
  3. RUN:容器构建时需要运行的命令
  4. EXPOSE:当前容器对外暴露的端口号
  5. WORKDIR:指定在创建容器后,终端默认登录进来的工作目录
  6. ENV:用来在构建镜像过程中设置环境变量
  7. ADD:将宿主机目录下的文件拷贝进镜像,ADD命令会自动处理URL和解压tar压缩包
  8. COPY:拷贝文件、目录到镜像中。具体是将从构建上下文目录中<src原路径>的文件或目录复制到新一层镜像的<目标路径>位置 ,有两种写法:COPY src dest 或者 COPY ["src", "dest"]
  9. VOLUME:容器数据卷,用于数据保存和持久化工作
  10. CMD:指定一个容器启动时要运行的命令

注意DockerFile中可以有多个CMD指令,但只有最后一个在启动时生效,CMD会被 docker run 之后的命令或参数覆盖

CMD指令的格式和RUN相似,也是两种格式:

shell格式:CMD <命令>

exec格式:CMD ["可执行文件", "参数1", "参数2" ...] 参数列表格式:CMD ["参数1", "参数2", ...],在指定了ENTRYPOINT 指令后,用CMD指定具体的参数。

  1. ENTRYPOINT:指定一个容器启动时要运行的命令,与CMD一样都是在指定容器启动程序及参数(下面通过实例2将他们的区别)。
  2. ONBUILD:当构建一个被继承的DockerFile时运行命令, 父镜像在被子镜像继承后,父镜像的ONBUILD被触发。

构建镜像

我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

下面是今天的作业,完成一个Dockerfile构建镜像。使用了多段构建技术,将编译镜像和运行镜像分离,达到缩小镜像体积的目的

from golang:1.16-alpine as build
env myname="wangkeyang"
workdir /app
add . ./
run GOOS=linux go build -o hello helloworld.go

from scratch
workdir /
env myname="wangkeyang"
copy --from=build /app/hello .
copy --from=build /app/dockerfile /home/dockerfile
cmd ["./hello"]